home *** CD-ROM | disk | FTP | other *** search
- *COPY IKXUTL 05000000
- CHECKVER IKXUTL,4.2 @SC90072 05000500
- &STORDS DSECT @SC90264 05001000
- DS (STKDWDS)D Allow room for stack @SC90264 05001500
- DFHEIEND , @SC90264 05002000
- TITLE 'CWDSET/DSPACE Routines - set/show working directory' 05002500
- * Set new 'working directory' 05003000
- * Entry: SCANPTR string has option 05003500
- * Exit: R15=0 if ok, R15=1 if error or help needed. ERRNUM unchanged. 05004000
- CWDSET ENTER @SC86164 05004500
- NTOKN N=CWDRSET,H=CWDERR @SC86299 05005000
- CLI 0(6),C'*' @SC90264 05005500
- BE CWDRSET Any string beginning "*" is dflt @SC90264 05006000
- LA 1,0(7,6) Point to last character @SC90264 05006500
- CLI 0(1),C'''' Is it a quote? @SC90264 05007000
- BE *+8 Yes, chop it off @SC90264 05007500
- LA 7,1(,7) No, get true token length @SC90264 05008000
- LR 5,7 @SC86299 05008500
- ICM 7,8,BLANK @SC86299 05009000
- LA 0,DEST @SC90264 05009500
- LA 1,L'DEST Length of field @SC86299 05010000
- CR 5,1 @SC90264 05010500
- BNH *+6 @SC90264 05011000
- LR 5,1 Claim no more than available @SC90264 05011500
- STH 5,DESTL Set string length @SC90264 05012000
- MVCL 0,6 Copy to filename buffer @SC86299 05012500
- TR DEST,UPCASE And upcase it @SC87034 05013000
- NXTFSET DESTL,CWD,E=CWDERR @SC90264 05013500
- KCALL KFLCWD,DESTL @SC90264 05014000
- B RTRN0 @SC86295 05014500
- CWDRSET MVI DESTL+1,1 Set to default @SC90264 05015000
- MVI DEST,C'*' @SC90264 05015500
- KCALL KFLCWD,DESTL @SC90264 05016000
- B RTRN0 @SC86295 05016500
- CWDERR PTEXT 'Must be valid file prefix' @SC86299 05017000
- MVI DESTL+1,1 Set to default @SC90264 05017500
- MVI DEST,C'*' @SC90264 05018000
- KCALL KFLCWD,DESTL @SC90264 05018500
- B SUBERR @SC86295 05019000
- * 05019500
- * DSPACE Routine - display available disk space @SC86164 05020000
- * 05020500
- * Show space available in 'working directory' or other area 05021000
- * Entry: SCANPTR string has option (none => working directory) 05021500
- * Exit: R15=0 if ok, R15=1 if error or help needed. ERRNUM unchanged 05022000
- DSPACE ENTER ALT @SC86164 05022500
- CLI CURFUID,0 @SC90264 05023000
- BNE DSP2 @SC90264 05023500
- PTEXT 'No directory defined' @SC90264 05024000
- B SUBERR @SC86299 05024500
- DSP2 L 4,LIMKFS Quota @SC90264 05025000
- LA 15,CMD @SC90264 05025500
- BAL 2,EDDEC Format number @SC90264 05026000
- MVC 0(16,15),=C' bytes allowed, ' @SC90264 05026500
- LA 15,16(,15) @SC90264 05027000
- L 4,USRTOTL Amount used @SC90264 05027500
- BAL 2,EDDEC Format number @SC90264 05028000
- MVC 0(15,15),=C' bytes used in ' @SC90264 05028500
- MVC 15(LFUID,15),CURFUID @SC90264 05029000
- LA 0,15+LFUID(,15) End of message @SC90264 05029500
- BAL 2,STAPMSG @SC90264 05030000
- B RTRN0 @SC86295 05030500
- LOCALS , @SC86295 05031000
- EXIT , @SC86295 05031500
- TITLE 'FSPEC Routine - extract filespec from scan string' 05032000
- * 05032500
- * Entry: R1->name field, R0=flags selecting operation (see below) 05033000
- * For parse operations, SCANPTR defines the input string. 05033500
- * For getting foreign or display filespec, R7->output buffer 05034000
- * Exit: if not FFNEW, then R15=0 if ok, 1 if ?, 2 if bad. 05034500
- * For R15=1 or 2 R3,R4 give message. ERRNUM may be leftover. 05035000
- * 05035500
- * Flags: Notes: 05036000
- * Tasks: FFRCF FFSND FFGET FFNEW 05036500
- * Parse RECV X set ROVR properly 05037000
- * Parse SEND 1st X 05037500
- * Parse SEND 2nd X X 05038000
- * Parse GET 1st X 05038500
- * Parse GET 2nd X X set ROVR properly 05039000
- * Parse F-packet (FFHDR) X X X 05039500
- * Parse for Generic(FFUTL) X X FFWLD: allow partial 05040000
- * Parse TAKE 05040500
- * 05041000
- * Get unique name X R15: 0=>ok, 1=>bad 05041500
- * Interactive name check X X R15: 0=>ok, 1=>bad 05042000
- * Get foreign name (FFENC) X X R15->end of string 05042500
- * Get display form (FFDSP) X X R15->end of string 05043000
- * 05043500
- FSPEC ENTER @SC86295 05044000
- STC 0,FSPFLG @SC86295 05044500
- LR 5,0 @SC88049 05045000
- SRL 5,4 Convert flags to index @SC88049 05045500
- LR 0,1 Copy ptr to filespec @SC86295 05046000
- TM FSPFLG,FFNEW @SC86295 05046500
- BO FSPWRN @SC86295 05047000
- L 2,ADR Ptr to text string for analysis @SC90264 05047500
- C 2,=A(KERMIT) Is it within Kermit? @SC90264 05048000
- BL SCANFXZ No, we're safe @SC90264 05048500
- C 2,=A(FOPSTR) (last CSECT in Kermit) @SC90264 05049000
- BH SCANFXZ @SC90264 05049500
- ICM 3,15,LEN Yes, but is it non-empty? @SC90264 05050000
- BNP SCANFXZ No, don't need to copy @SC90264 05050500
- BCTR 3,0 Yes, set up for MVC @SC90264 05051000
- L 4,STRBUF Ptr to temporary area @SC90264 05051500
- MVC 0(,4),0(2) @SC90264 05052000
- EX 3,*-6 Move proper chunk @SC90264 05052500
- ST 4,ADR Replace ptr to string @SC90264 05053000
- SCANFXZ DS 0H @SC90264 05053500
- LR 8,1 Save ptr to filespec @SC86299 05054000
- USING FABFID,8 Map filespec @SC90264 05054500
- XC FABFID,FABFID Clear filespec @SC90264 05055000
- MVC FABFUID,DEST Init user id @SC90264 05055500
- PTEXT 'Invalid filespec' @SC90264 05056000
- MVI ERRNUM,ERRFNE Assume bad file name @SC86158 05056500
- IC 5,FSP0(5) Get dispatch adr @SC88049 05057000
- B FSP0(5) Go to proper handler @SC88049 05057500
- * TAKE GET 1st SEND 1st Generic @SC88049 05058000
- FSP0 DC AL1(FSPCPY-FSP0,FSPSN2-FSP0,FSPASC-FSP0,FSPUTL-FSP0) SC88049 05058500
- * RECEIVE GET 2nd SEND 2nd F-packet @SC88049 05059000
- DC AL1(FSPRC-FSP0,FSPRC-FSP0,FSPSN2-FSP0,FSPHD-FSP0) @SC88049 05059500
- FSPUTL TM FSPFLG,FFWLD Utility: default to all files? @SC88049 05060000
- BZ FSPASC No @SC86295 05060500
- LA 1,LFID @SC88043 05061000
- LA 14,DEST Default to prefix @SC88043 05061500
- * Convert to default filespec @SC90264 05062000
- FSPASC TM FL2,SRV Server mode? @SC86295 05062500
- BZ FSPCPY No, don't need to convert @SC86295 05063000
- ICM 15,15,LEN Get length @SC86295 05063500
- BZ FSPCPY @SC86295 05064000
- BCTR 15,0 Correct for EX @SC86158 05064500
- L 5,ADR Get string ptr @SC89215 05065000
- EX 15,FSPTRAE Change to EBCDIC @SC89215 05065500
- EX 15,FSPTRUP Upcase @SC89215 05066000
- B FSPCPY @SC86295 05066500
- FSPTRAE TR 0(,5),ATOED @SC89301 05067000
- FSPTRUP TR 0(,5),UPCASE @SC89215 05067500
- FSPRC NI FL1,255-ROVR Setup for RECEIVE @SC86295 05068000
- NI FL4,255-NMOK-NMCHNG Collision not checked yet @SC90033 05068500
- MVI FABFNAM,C'$' Allow missing filespec @SC90264 05069000
- B FSPCPY @SC86295 05069500
- FSPHD MVI FABFNAM,1 Use default if missing filespec @SC90264 05070000
- B FSPCPY @SC86299 05070500
- FSPSN2 CLI BRK,C',' @SC88306 05071000
- BE RTRN0 No foreign name: multiple format @SC88306 05071500
- NTOKN H=FSP2H,N=RTRN0 @SC88306 05072000
- LA 7,1(,7) Get token length @SC89179 05072500
- LA 1,L'JFNAM @SC86295 05073000
- CR 7,1 Does it fit? @SC89179 05073500
- BNH *+6 Yes @SC86224 05074000
- LR 7,1 Use what we can @SC86224 05074500
- LR 3,0 @SC86295 05075000
- STC 7,0(3) Save length @SC86224 05075500
- LA 0,1(3) @SC86295 05076000
- MVCL 0,6 Get fn, at least @SC86224 05076500
- B RTRN0 @SC86295 05077000
- * 05077500
- FSPCPY NTOKN H=FSPH,N=FSPZ @SC86299 05078000
- FSPCP2 KCALL FOPSTR,LFID(,8),E=FSPINV @SC89218 05078500
- * id.TD -> FABFTD, 4-byte ---, 4-byte destid, 4 blanks @SC90264 05079000
- * id.TS -> FABFTS, 4-byte ---, 8-byte id @SC90264 05079500
- * id.TSAUX -> FABFTS, 4-byte ---, 8-byte id @SC90264 05080000
- * id.TSMAIN-> FABFTS+FABFMAIN, 4-byte ---, 8-byte id @SC90264 05080500
- * id -> FABFTS, 4-byte ---, 8-byte id (but see below) @SC90264 05081000
- * id.PGM -> FABFPGM, 4-byte parm, 8-byte pgm id @SC90264 05081500
- * id.SPOOL -> FABFSPL, 4-byte class, 8-byte spool name @SC90264 05082000
- * id.TAKE -> FABFTAK, 4-byte uid, 8-byte file id @SC90264 05082500
- * id -> (same, if TAKE or GIVE command) @SC90264 05083000
- * 'name.etc-> FABFSPL, 4-byte ', name ptr, 2-byte offset, len @SC90264 05083500
- L 2,QFNPTR Last-used buffer @SC90264 05084000
- MVC QFNPTR,QFNSIZ(2) Set up for next @SC90264 05084500
- L 2,QFNPTR Get ptr @SC90264 05085000
- MVC 0(QFNSIZ,2),DEST+1 Copy prefix to buffer, less '@SC90264 05085500
- LH 14,DESTL Get length so far @SC90264 05086000
- BCTR 14,0 @SC90264 05086500
- CLI 0(6),C'''' Is name actually spelled out? @SC90264 05087000
- BNE FSPQF1 No, keep prefix @SC90264 05087500
- SR 14,14 Yes, start over @SC90264 05088000
- LA 6,1(,6) and skip ' @SC90264 05088500
- BCTR 7,0 @SC90264 05089000
- MVI FABFUID,C'''' Qualified name @SC90264 05089500
- FSPQF1 LA 1,0(7,6) Point to last character @SC90264 05090000
- CLI 0(1),C'''' Does it end with a quote? @SC90264 05090500
- BE *+8 Yes, chop it off @SC90264 05091000
- LA 1,1(,1) No, keep last char @SC90264 05091500
- LR 0,6 @SC90264 05092000
- SR 1,0 Set up for MVCL @SC90264 05092500
- ICM 1,8,BLANK @SC90264 05093000
- STH 14,QFNSHB Save offset to start of short name@SC90264 05093500
- AR 14,2 Ptr within buffer @SC90264 05094000
- LA 15,QFNSIZ(,2) End of buffer @SC90264 05094500
- SR 15,14 @SC90264 05095000
- MVCL 14,0 Now, QFN is set, just in case @SC90264 05095500
- EX 7,FSPTRUPD Convert to upper case @SC90264 05096000
- CLI 0(6),C' ' Hope it didn't start with dot @SC90264 05096500
- BE FSPINV Oops @SC90264 05097000
- TM FSPFLG,FFRCF @SC86295 05097500
- BZ *+8 @SC86295 05098000
- OI FL1,ROVR Overwrite received fname @SC86295 05098500
- MVI FABFLGS,FABFTS Default is tmp.stor. @SC90264 05099000
- TM FSPFLG,X'70' TAKE file? @SC91150 05099500
- BNZ *+8 No @SC91150 05100000
- MVI FABFLGS,FABFTAK Yes, default is TAKE @SC90264 05100500
- MVI TRTBL+C'/',1 Also look for slash @SC90264 05101000
- FSPCPUID LA 1,1(7,6) Past end @SC90264 05101500
- EX 7,FSPTRTB Find what was dot, if any @SC90264 05102000
- MVI TRTBL+C'/',0 @SC90264 05102500
- LR 5,1 Save ptr to first dot @SC90264 05103000
- BZ FSPCP3 No dot, assume TS @SC90264 05103500
- CLI 0(1),C'/' @SC90264 05104000
- BNE FSPCPUIZ No slash either, go on @SC90264 05104500
- SR 1,6 Get length of uid @SC90264 05105000
- BNP FSPINV Empty uid, no good @SC90264 05105500
- LR 0,6 Start of uid @SC90264 05106000
- LA 1,1(,1) Length of uid plus '/' @SC90264 05106500
- AR 6,1 Adjust ptrs to text @SC90264 05107000
- SR 7,1 @SC90264 05107500
- BNP FSPINV Nothing left, error @SC90264 05108000
- BCTR 1,0 Get length of uid again @SC90264 05108500
- LA 14,FABFUID @SC90264 05109000
- LA 15,LFUID @SC90264 05109500
- ICM 1,8,BLANK Set to blank-fill @SC90264 05110000
- MVCL 14,0 Copy to FID @SC90264 05110500
- CLM 1,7,F0 Uid all used up? @SC90264 05111000
- BNE FSPINV No, was too long @SC90264 05111500
- B FSPCPUID Now look for file name @SC90264 05112000
- FSPCPUIZ LA 1,1(7,6) Past end @SC90264 05112500
- AR 7,6 Ptr to last char @SC90264 05113000
- SR 7,5 Anything after 1st dot? @SC90264 05113500
- BNP FSPINV No, error @SC90264 05114000
- BCTR 7,0 @SC90264 05114500
- CLI FABFUID,C'''' Qualified name? @SC90264 05115000
- BE FSPQFN Yes @SC90264 05115500
- * EX 7,FSPTRTB5 Look for another dot @SC90264 05116000
- SR 1,5 Get length of type + 1 @SC90264 05116500
- S 1,F2 Length - 1 @SC90264 05117000
- BM FSPINV Null, must have been .. @SC90264 05117500
- LA 14,FSPTYPS Start of table @SC90264 05118000
- SR 15,15 @SC90264 05118500
- FSPCPTLP CLI 0(14),255 @SC90264 05119000
- MVI FABFLGS,0 Just in case not found @SC90264 05119500
- BE FSPINV Not found @SC90264 05120000
- MVC FABFLGS,1(14) Copy flags @SC90264 05120500
- IC 15,0(,14) Get length of possible type @SC90264 05121000
- EX 1,FSPCPCLC See if a match @SC90264 05121500
- LA 14,3(15,14) Space over this one, in case @SC90264 05122000
- BNE FSPCPTLP No match, keep looking @SC90264 05122500
- CR 1,15 Seems to match. Same length? @SC90264 05123000
- BNE FSPCPTLP No match, keep looking @SC90264 05123500
- FSPCP3 LA 15,1(7,6) Past end once more @SC90264 05124000
- SR 5,6 Get length of token @SC90264 05124500
- LR 7,5 @SC90264 05125000
- ICM 7,8,BLANK @SC90264 05125500
- LA 1,LFFNM @SC90264 05126000
- LA 0,FABFNAM Start of name per se @SC90264 05126500
- MVCL 0,6 Copy to destination name @SC90264 05127000
- TM FABFLGS,FABFTAK @SC91150 05127500
- BZ FSPCP4 Leave fileclass alone if not TAKE @SC91150 05128000
- CLI FABFUID,C'*' Self? @SC91150 05128500
- BNE FSPCP4 @SC91150 05129000
- MVC FABFUID,KUSERID Yes, set to userid @SC91150 05129500
- FSPCP4 DS 0H @SC91150 05130000
- TM FABFLGS,FABFTD @SC90264 05130500
- BZ RTRN0 @SC90264 05131000
- CLI FABFNAM+4,C' ' TD id must be only 4 bytes @SC90264 05131500
- BNE FSPINV @SC90264 05132000
- B RTRN0 @SC87034 05132500
- * 05133000
- FSPQFN MVI TRTBL+C'(',1 @SC90264 05133500
- EX 7,FSPTRTB5 Find next dot or (, if any @SC90264 05134000
- MVI TRTBL+C'(',0 @SC90264 05134500
- SR 1,6 @SC90264 05135000
- STH 1,QFNSHL @SC90264 05135500
- MVC FABFNAM(8),QFNPTR Save ptrs to QFN in FAB @SC90264 05136000
- MVI FABFLGS,FABFSPL Treat like a spool file, CL=' @SC90264 05136500
- B RTRN0 @SC90264 05137000
- * 05137500
- FSPTRUPD TR 0(,6),FSPUPDOT Upcase and dot to blank @SC90264 05138000
- FSPDSPMV MVC 1(,1),2(14) Copy type from table @SC90264 05138500
- FSPCPCLC CLC 2(,14),1(5) Compare to type table @SC90264 05139000
- FSPTRTB5 TRT 1(,5),TRTBL Look for 2nd blank @SC90264 05139500
- FSPTRTB TRT 0(,6),TRTBL Look for blank @SC90264 05140000
- * 05140500
- * Table of file types: AL1(len-1,flags),C'type' @SC90264 05141000
- FSPTYPS DC AL1(2-1,FABFTS),C'TS' @SC90264 05141500
- DC AL1(5-1,FABFTS),C'TSAUX' @SC90264 05142000
- DC AL1(6-1,FABFTS+FABFMAIN),C'TSMAIN' @SC90264 05142500
- DC AL1(2-1,FABFTD),C'TD' @SC90264 05143000
- DC AL1(3-1,FABFPGM),C'PGM' @SC90264 05143500
- DC AL1(5-1,FABFSPL),C'SPOOL' @SC90264 05144000
- DC AL1(4-1,FABFTAK),C'TAKE' @SC90264 05144500
- DC AL1(255) @SC90264 05145000
- * 05145500
- FSPZ LA 6,1 Update counter @SC86299 05146000
- A 6,EVCTR @SC86299 05146500
- ST 6,EVCTR @SC86299 05147000
- UNPK FSPFNAM(5),EVCTR(5) @SC90264 05147500
- TR FSPFNAM(6),TRHEX Get unique DDNAME @SC90264 05148000
- MVI FSPFNAM,C'K' @SC90264 05148500
- L 15,DFHEIBP @SC90264 05149000
- MVC FSPFNAM+4(4),EIBTRMID-DFHEIBLK(15) Make unique @SC90264 05149500
- MVC FSPFNAM+8(3),=C'.TS' @SC90264 05150000
- LA 6,FSPFNAM Default name @SC90264 05150500
- LA 7,11-1 @SC90264 05151000
- CLI FABFNAM,1 @SC90264 05151500
- BE FSPCP2 Get default DEST @SC90264 05152000
- BH RTRN0 Don't insist @SC86299 05152500
- PTEXT 'Missing filespec' @SC90264 05153000
- FSPINV LA 15,2 @SC86295 05153500
- B FSPPTRS @SC86295 05154000
- * 05154500
- FSPH PTEXT 'Enter filespec[<first-last[_CC]>]' @SC91224 05155000
- CLI FSPFLG,FFSND SEND 1st? @SC89261 05155500
- BE *+8 Yes, use whole message @SC89261 05156000
- SH 4,=H'19' Chop off option part @SC91224 05156500
- B FSP0H @SC86295 05157000
- FSP2H PTEXT 'Enter foreign filespec' @SC86295 05157500
- FSP0H LA 15,1 @SC86295 05158000
- FSPPTRS RETREG 3,4 @SC86295 05158500
- FSPRET RET , @SC86295 05159000
- * 05159500
- * Non-parsing functions . . . 05160000
- * 05160500
- * Get unique filespec 05161000
- FSPWRN LR 8,1 Save name ptr @SC90264 05161500
- TM FSPFLG,FFENC @SC86295 05162000
- BO FSPENC Encode name into buffer @SC86295 05162500
- TM FSPFLG,FFDSP @SC86295 05163000
- BO FSPDSP Copy name into buffer for display @SC86295 05163500
- TM FL4,NMOK Already checked? @SC87012 05164000
- BO RTRN0 Yes, ok @SC87012 05164500
- MVC XFILE,FABFID Save original name @SC90033 05165000
- MVC FSPFID,FABFID Save original name @SC87015 05165500
- TM FABFLGS,FABFPGM Pipe? @SC90264 05166000
- BO FSPNOKD Yes, name is already unique @SC90264 05166500
- LA 6,FSPFNAM+6 End of id @SC90264 05167000
- BCTR 6,0 @BS86001 05167500
- CLI 0(6),C' ' Find end of token @BS86001 05168000
- BE *-6 @BS86001 05168500
- LA 5,10+1 Allowed retries @BS86001 05169000
- LA 7,C'0' Extra character @BS86001 05169500
- FSPTOPN OPENF T,FSPFID,E=FSPNOKA No collision @SC91150 05170000
- CLI FSPFID+1,C'''' Quoted file name? @SC90264 05170500
- BE FSPCOLL Yes, give up @SC90264 05171000
- OI FL4,NMCHNG Remember collision occurred @SC90033 05171500
- MVI 1(6),C'$' Yes, modify id @BS86001 05172000
- TM FSPFID,FABFTAK TAKE file? @SC90264 05172500
- BO *+8 Yes, keep it so @SC90264 05173000
- MVI FSPFID,FABFTS No, alternate would always be TS @SC90264 05173500
- STC 7,2(,6) Serialize @BS86001 05174000
- LA 7,1(7) Bump counter @BS86001 05174500
- BCT 5,FSPTOPN @SC87015 05175000
- FSPCOLL PTEXT 'File name collision' @SC90264 05175500
- B FSP0H Return ptrs and rc=1 @SC88049 05176000
- FSPNOKA TM FSPFID,FABFTD TD? @SC91150 05176500
- BZ FSPNOKD No, it's really ok @SC91150 05177000
- CLI DSKSTT+FDBFL2-FABD,0 Did we find anything? @SC91150 05177500
- BE FSPCOLL Nothing, can't write there @SC91150 05178000
- FSPNOKD MVC FABFID,FSPFID Copy name back @SC87015 05178500
- OI FL4,NMOK @SC87015 05179000
- B RTRN0 @SC87015 05179500
- * 05180000
- * Encode name at (R8) into (R7) buffer (in ASCII), possibly with 05180500
- * substitution from JFSPEC, but disable subsequent subst. 05181000
- * Return updated ptr in R15 05181500
- FSPENC CLI FABFLGS,0 Valid filespec? @SC90264 05182000
- BNE FSPENC1 Yes, do it @SC90264 05182500
- MVC 0(16,7),=C'Invalid filespec' @SC90264 05183000
- LA 1,16(,7) Mark end of message @SC90264 05183500
- B FSPENTR And use it @SC90264 05184000
- FSPENC1 LA 1,JFSPEC Complex string? @SC90264 05184500
- BAL 14,PAKFOR @SC86224 05185000
- BNZ FSPECPZ Yes, name overridden @SC86299 05185500
- LR 1,7 Set ptr @SC90264 05186000
- BAL 9,FSPDSPL Get id @SC90264 05186500
- FSPENTR DS 0H Translate and adjust ptr @SC88070 05187000
- TR 0(LFID+8,7),ETOAD @SC89301 05187500
- LR 7,1 Advance ptr @SC86299 05188000
- FSPECPZ MVI JFSPEC,0 Turn off string @SC86299 05188500
- FSPENR LR 15,7 Save ptr @SC86295 05189000
- B FSPRET @SC86295 05189500
- * 05190000
- * Copy name at (R8) into (R7) buffer in display form @SC90264 05190500
- * Return updated ptr in R15 05191000
- FSPDSP LR 1,7 Output ptr @SC90264 05191500
- TM FABFLGS,FABFTAK TAKE file? @SC90264 05192000
- BZ FSPDSP2 No, uid is ignored @SC90264 05192500
- CLC FABFUID,CURFUID Yes. Is uid the usual? @SC91150 05193000
- BE FSPDSP2 Yes, suppress it @SC90264 05193500
- MVC 0(LFUID,1),FABFUID @SC90264 05194000
- TRT 0(LFUID,1),TRTBL Check for trailing blanks @SC90264 05194500
- BNZ *+8 @SC90264 05195000
- LA 1,LFUID(,1) None, set ptr to max @SC90264 05195500
- MVI 0(1),C'/' @SC90264 05196000
- LA 1,1(,1) Skip over '/' @SC90264 05196500
- FSPDSP2 BAL 9,FSPDSPL Encode id @SC90264 05197000
- LR 15,1 End of string @SC90264 05197500
- B FSPRET @SC86299 05198000
- * Encode id from R8 into buffer at R1, return new ptr in R1 @SC90264 05198500
- * Uses R2,R14,R15. Return via R9 @SC90264 05199000
- FSPDSPL CLI FABFUID,C'''' Quoted file name? @SC90264 05199500
- BNE FSPDSPL1 No, do normal decoding @SC90264 05200000
- ICM 14,15,FABFNAM Yes, get ptr to buffer @SC90264 05200500
- AH 14,FABFNAM+4 Get offset for display form @SC90264 05201000
- S 14,F2 Back up to set up MVC @SC90264 05201500
- MVI 0(1),C'''' Insert quote to flag it @SC90264 05202000
- LH 15,FABFNAM+6 Get length of name @SC90264 05202500
- BCTR 15,0 Correct for MVC @SC90264 05203000
- EX 15,FSPDSPMV Move to the output @SC90264 05203500
- LA 1,2(15,1) Point past the end @SC90264 05204000
- BR 9 All done @SC90264 05204500
- FSPDSPL1 MVC 0(LFFNM,1),FABFNAM Grab id @SC90264 05205000
- TRT 0(LFFNM,1),TRTBL Check for trailing blanks @SC90264 05205500
- BNZ *+8 @SC90264 05206000
- LA 1,LFFNM(,1) @SC90264 05206500
- MVI 0(1),C'.' Insert dot @SC90264 05207000
- LA 14,FSPTYPS Start of table @SC90264 05207500
- SR 15,15 @SC90264 05208000
- FSPDSPLP CLI 0(14),255 @SC90264 05208500
- BER 9 Not found, omit type (???) @SC90264 05209000
- MVC FSPFID(1),1(14) Copy flags @SC90264 05209500
- IC 15,0(,14) Get length of possible type @SC90264 05210000
- EX 15,FSPDSPMV Copy type to string @SC90264 05210500
- LA 14,3(15,14) Space over this one, in case @SC90264 05211000
- NC FSPFID(1),FABFLGS See if same type @SC90264 05211500
- BZ FSPDSPLP No match, keep looking @SC90264 05212000
- LA 1,2(15,1) Point past the end @SC90264 05212500
- BR 9 @SC90264 05213000
- DROP 8 @SC90264 05213500
- * 05214000
- * Table to convert EBCDIC text to upper case + dot to blank @SC89215 05214500
- FSPUPDOT DC (C'.')AL1(*-FSPUPDOT) @SC89215 05215000
- DC C' ' @SC89215 05215500
- DC (127-C'.')AL1(*-FSPUPDOT) @SC89215 05216000
- HTBL 80,C1,C2,C3,C4,C5,C6,C7,C8,C9,8A,8B,8C,8D,8E,8F @SC89268 05216500
- HTBL 90,D1,D2,D3,D4,D5,D6,D7,D8,D9,9A,9B,9C,9D,9E,9F @SC89268 05217000
- HTBL A0,A1,E2,E3,E4,E5,E6,E7,E8,E9,AA,AB,AC,AD,AE,AF @SC89268 05217500
- DC 080AL1(*-FSPUPDOT) @SC89215 05218000
- LOCALS , @SC86295 05218500
- FSPFID DS CL(LFID) @SC88342 05219000
- FSPFNAM EQU FSPFID+1+LFUID File name per se @SC90264 05219500
- FSPFLG DS X Filespec flags @SC86295 05220000
- FSPEC EXIT @SC86295 05220500
- TITLE 'KHELP routine - perform HELP command' 05221000
- * Handle HELP command, rest of string given by SCANPTR. 05221500
- * On entry, R6->help command string 05222000
- KHELP ENTER , @SC86355 05222500
- LR 8,6 Save ptr to command @SC88043 05223000
- SR 5,5 Clear length of extra word @SC90264 05223500
- NTOKN N=KHLI See if subcommand given @SC86355 05224000
- L 1,=A(USNCMD) Command table @SC87117 05224500
- KHSCAN SCAN (1),KHLF,NODISP @SC86355 05225000
- WTEXT 'Not a valid subcommand' Not found @SC86355 05225500
- RET , @SC86355 05226000
- KHLF CLM 7,8,F0 Just '?' @SC86355 05226500
- BE RTRN Yes, done @SC86355 05227000
- CLC =C'SET',KWNAME(1) @SC90264 05227500
- BNE KHNORM Normal subcommands @SC90264 05228000
- PTEXT 'SET',AREG=4,LREG=5 @SC90264 05228500
- NTOKN N=KHSET Just SET -- no parameter @SC90264 05229000
- L 1,=A(SETCMDKW) Keyword table @SC90264 05229500
- B KHSCAN Go back and check parameter @SC90264 05230000
- KHNORM DS 0H @SC90264 05230500
- LA 6,KWNAME(,1) Ptr to name in table @SC90264 05231000
- SR 7,7 @SC90264 05231500
- IC 7,KWMIN(,1) Length - 1 of abbrev @SC90264 05232000
- LA 7,1(,7) @SC90264 05232500
- B KHLJ Create command string for typing @SC90264 05233000
- KHSET SR 7,7 Plain SET with no parameter @SC90264 05233500
- B KHLJ Do it @SC90264 05234000
- KHLI PTEXT 'KERMITCM',AREG=6,LREG=7 @SC90264 05234500
- KHLJ PTEXT '&TYPCMD ',AREG=0,LREG=1 @SC90264 05235000
- LA 14,KHLPBF @SC90264 05235500
- LR 15,1 @SC90264 05236000
- MVCL 14,0 Copy 'type' to buffer @SC90264 05236500
- MVC 0(LFUID+1,14),SYSUID Set up filespec @SC90264 05237000
- LA 14,LFUID+1(,14) @SC90264 05237500
- LR 15,5 @SC90264 05238000
- LA 5,8 Keep track of available space @SC90264 05238500
- MVCL 14,4 Copy 'SET' to buffer, if needed @SC90264 05239000
- LR 15,7 @SC90264 05239500
- LR 7,5 Remaining space @SC90264 05240000
- MVCL 14,6 Copy 'subcmd' to buffer @SC90264 05240500
- LA 15,4 Length of suffix desired @SC90264 05241000
- CR 15,7 @SC90264 05241500
- BNH *+6 @SC90264 05242000
- LR 15,7 Can't fit it all @SC90264 05242500
- LA 6,=CL4'HELP' Suffix @SC90264 05243000
- MVCL 14,6 @SC90264 05243500
- MVC 0(5,14),=C'.TAKE' Set file type @SC90264 05244000
- LA 6,5(,14) End of string @SC90264 05244500
- LA 0,KHLPBF Start of command @SC90264 05245000
- SR 6,0 Total length @SC88043 05245500
- NI FL4,255-UCMD @SC88043 05246000
- KCALL SUPFNC,3 Do it @SC86355 05246500
- RET , @SC86355 05247000
- LOCALS , 05247500
- KHLPBF DS CL4,C,CL(LFUID+1),CL8,CL5 Space for command @SC90264 05248000
- KHELP EXIT , @SC87007 05248500
- TITLE 'SUPFNC Routine - various supervisor functions' @SC86158 05249000
- SUPFNC ENTER @SC86295 05249500
- * On entry, R1 = operation code, R0 = possible ptr @SC86158 05250000
- * Exit: R15 set (0 => ok, <0 => illegal cmd, >0 => depends) 05250500
- * ERRNUM set appropriately (R1=1,3,4) or unchanged (2,5-11) 05251000
- * 1 -> Start typeout interception. N.B. &MAXLR >> 2048 for this 05251500
- * 2 -> Clean up afterwards and stop interception 05252000
- * 3 -> Execute host command with or without interception 05252500
- * If UCMD set, SCANPTR gives text, else R0->text,R6=len 05253000
- * 4 -> (not used) 05253500
- * 5 -> Stop interception if going 05254000
- * 6 -> Retrieve original cmd parm string into CBUF (R15=1 if null) 05254500
- * 7 -> Test for stacked lines, return number in R15 05255000
- * 8 -> Log off (must return to TMP) 05255500
- * 9 -> Wait specified time 05256000
- * 10-> Return clock time in R15 (centisec) 05256500
- * 11-> Setup up new prompt string at (R0) 05257000
- AR 1,1 @SC89268 05257500
- LH 1,SFC0-2(1) Get dispatch address @SC89268 05258000
- B SFC0(1) @SC89268 05258500
- SFC0 DC Y(ICPBEG-SFC0,ICPFIN-SFC0,SFCHST-SFC0) 1-3 @SC89268 05259000
- DC Y(SFCILL-SFC0,ICPRST-SFC0,SFCLIN-SFC0) 4-6 @SC89268 05259500
- DC Y(SFCSTK-SFC0,SFCKIL-SFC0,SFCWT-SFC0) 7-9 @SC89268 05260000
- DC Y(SFCCLK-SFC0,SFCPRP-SFC0) 10-11 @SC89268 05260500
- * 05261000
- * Start interception, initialize ptrs @SC86158 05261500
- ICPBEG MVI ERRNUM,ERRNOE OK @SC89268 05262000
- L 1,WBUF Output buffer @SC90264 05262500
- LA 0,2048(,1) Skip over some, to be safe @SC90264 05263000
- SH 1,=Y(MAXDOF) @SC90264 05263500
- A 1,F64KP End of buffer @SC90264 05264000
- LR 15,0 @SC86158 05264500
- STM 15,1,TXTPTR Save @SC86158 05265000
- SR 1,0 Get length @SC86158 05265500
- L 15,=X'15000000' @SC86158 05266000
- MVCL 0,14 Fill with NL (X'15') @SC86158 05266500
- MVI ICPFL,2 Now intercepting typeout @SC88026 05267000
- B RTRN0 @SC86295 05267500
- * Clean up after interception @SC86295 05268000
- ICPFIN DS 0H @SC89268 05268500
- * Restore normal typeout 05269000
- ICPRST MVI ICPFL,0 Tear down @SC88026 05269500
- B RTRN0 05270000
- * Execute host command at (R0) with length (R6), unless UCMD set, 05270500
- * in which case string given by SCANPTR 05271000
- SFCHST TM FL4,UCMD User command? @SC86295 05271500
- BO SFCHS0 Yes, scan already set up @SC86355 05272000
- ST 0,ADR Set scan string ptrs @SC86355 05272500
- ST 6,LEN @SC86355 05273000
- SFCHS0 LM 0,1,SCANPTR Get length and adr @SC87034 05273500
- LTR 6,0 Copy length @SC87034 05274000
- BNP SFCILL No good @SC87034 05274500
- BCTR 6,0 @SC87034 05275000
- EX 6,TRUPCAS @SC87034 05275500
- NTOKN N=SFCHBAD @SC88308 05276000
- SCAN HSTCMDS,RTRN0 Dispatch to handler @SC88308 05276500
- * Not one of the canned commands, try as CICS @SC90264 05277000
- MVI ERRNUM,ERRSYS Say illegal command if failure @SC90264 05277500
- LA 7,1(,7) Token length @SC90264 05278000
- LA 1,L'SFCPGM Length of field @SC90264 05278500
- CR 7,1 Is it longer than max? @SC90264 05279000
- BH RTRNM1 Yes, forbid it @SC90264 05279500
- ICM 7,8,BLANK Prepare for MVCL with padding @SC90264 05280000
- LA 0,SFCPGM @SC90264 05280500
- MVCL 0,6 Copy to program name buffer @SC90264 05281000
- ICM 15,15,=A(KHOST) @SC90264 05281500
- BZ SFCHSX @SC90264 05282000
- LA 0,SFCPGM @SC90264 05282500
- L 1,ADR String address @SC90264 05283000
- LA 2,LEN Ptr to length @SC90264 05283500
- STM 0,2,SFCSECPL Set up calling sequence @SC90264 05284000
- KCALL (15),SFCSECPL,EXT,E=RTRNM1 @SC90264 05284500
- SFCHSX DS 0H @SC90264 05285000
- L 2,ADR Ptr to remaining string @SC90264 05285500
- EXEC CICS LINK PROGRAM(SFCPGM) COMMAREA(0(,2)), @SC90264+05286000
- LENGTH(LEN+2) NOHANDLE, @SC91150 05286500
- L 15,DFHEIBP Set up to copy EIB code @SC91150 05287000
- CLC F0,EIBRCODE-DFHEIBLK(15) Ok? @SC91150 05287500
- BNE RTRNM1 No, say illegal @SC91150 05288000
- TM FSCTRMF,X'80' TTY? @SC91150 05288500
- BZ SFCHSRC Yes, skip reformatting @SC91150 05289000
- TM FL4,UCMD User cmd? @SC91150 05289500
- BZ SFCHSRC No, skip reformatting @SC91150 05290000
- EXEC CICS SEND FROM(ICPSETCC) LENGTH(=Y(ICPSETL)), @SC91150+05290500
- CTLCHAR(=X'C3') WAIT, Reformat but don't clear @SC91150 05291000
- SFCHSRC DS 0H @SC91150 05291500
- SR 15,15 Clear RC for now @SC90264 05292000
- CLC =C'R(',0(2) Is it a return code? @SC91150 05292500
- BNE SFCUTZ No, just use 0 @SC91150 05293000
- CLI 6(2),C')' Must be four bytes @SC91150 05293500
- BNE SFCUTZ No, just use 0 @SC91150 05294000
- CLC 2(1,2),3(2) Is it small number? @SC91150 05294500
- BNE SFCUTZ No, just use 0 @SC91150 05295000
- ICM 15,15,2(2) Ok use that code @SC91150 05295500
- B SFCUTZ Display return code and return @SC90264 05296000
- * 05296500
- SFCHBAD MVI ERRNUM,ERRSYS Illegal system command @SC90223 05297000
- HELP HSTCMDS,RTRNM1 @SC90223 05297500
- * 05298000
- HSTCMDS KW 'DIRECTORY',SFCDIR,MIN=3 @SC88308 05298500
- KW 'COPY',SFCCOP,MIN=4 @SC88308 05299000
- KW 'DELETE',SFCDEL,MIN=3 @SC88308 05299500
- KW 'RENAME',SFCREN,MIN=3 @SC88308 05300000
- KW '&TYPCMD',SFCTYP @SC88308 05300500
- * ought to implement some on-line help @SC90264 05301000
- KW 'any CICS program',0,MIN=99 @SC90264 05301500
- KW , @SC88308 05302000
- * 05302500
- SFCDIR LA 3,13 DISKIO dir function code @SC88308 05303000
- B SFCUTL @SC88308 05303500
- SFCDEL LA 3,14 DISKIO del function code @SC88308 05304000
- B SFCUTL @SC88308 05304500
- SFCREN LA 3,15 DISKIO ren function code @SC88308 05305000
- B SFCUTL @SC88308 05305500
- SFCCOP LA 3,16 DISKIO cop function code @SC88308 05306000
- B SFCUTL @SC88308 05306500
- SFCTYP LA 3,17 DISKIO typ function code @SC88308 05307000
- * B SFCUTL @SC88308 05307500
- SFCUTL SR 0,0 @SC88308 05308000
- KCALL FSPEC,FILNAM,E=SUBERR @SC88308 05308500
- CH 3,SFCDEL+2 @SC88308 05309000
- BNH SFCUT1 Dir or del @SC88308 05309500
- CH 3,SFCTYP+2 @SC88308 05310000
- BE SFCUT1 Type @SC88308 05310500
- SR 0,0 @SC88308 05311000
- KCALL FSPEC,IFILE,E=SUBERR Get 2nd file name @SC88308 05311500
- SFCUT1 FTOKN N=SFCUT6 See if anything else in command @SC88308 05312000
- PTEXT 'No more operands' @SC88308 05312500
- B SUBERR @SC88308 05313000
- SFCUT6 LR 0,3 Get function code @SC88308 05313500
- LA 2,IFILE Optional 2nd name @SC88308 05314000
- KCALL DISKIO,FILNAM Do it @SC88308 05314500
- SFCUTZ DS 0H @SC90264 05315000
- LTR 4,15 @SC86295 05315500
- * Issue return code msg if needed @SC86295 05316000
- BZ SFCZRC RC=0 @SC86158 05316500
- TM FL4,UCMD User cmd? @SC86316 05317000
- BZ RTRN No. No message, just rc in R15 @SC90264 05317500
- MVC CMD(2),=C'R(' Set up message @SC86209 05318000
- LA 15,CMD+2 @SC86209 05318500
- BAL 2,EDDEC Edit RC into msg @SC86295 05319000
- MVI 0(15),C')' Format is R(rc) @SC86209 05319500
- LA 0,1(15) @SC86268 05320000
- LA 1,CMD Start of edited string @SC86209 05320500
- SR 0,1 Length @SC86268 05321000
- WTEXT (1),(0) @SC86268 05321500
- SFCZRC LR 15,4 @SC86295 05322000
- MVI ERRNUM,ERRNOE No errors @SC86295 05322500
- B RTRN @SC86295 05323000
- * Unused, system-specific command type 05323500
- SFCILL MVI ERRNUM,ERRSYS Illegal system command @SC86295 05324000
- B RTRNM1 @SC86295 05324500
- * 05325000
- * Retrieve original command line arguments, if any @SC86295 05325500
- * Return code =0 if yes, =1 if no @SC86295 05326000
- * Leave string in CBUF buffer (up to 512), length in CLEN @SC86295 05326500
- SFCLIN DS 0H @SC89268 05327000
- LH 15,LINLEN Length of data @SC90264 05327500
- LTR 15,15 Anything there? @SC86299 05328000
- BNP RTRN1 Nothing there @SC86299 05328500
- L 14,GTLBUFP Start of data @SC90264 05329000
- AR 15,14 End of data @SC90264 05329500
- CLI 0(14),SBA Check for fullscreen buffer adr @SC90264 05330000
- BNE *+8 @SC90264 05330500
- LA 14,3(,14) Yes, skip over it @SC90264 05331000
- SFCLNL1 LA 14,1(,14) Look for blank after tran id @SC90264 05331500
- CLI 0(14),C' ' @SC90264 05332000
- BE SFCLNL2 Found it @SC90264 05332500
- CR 14,15 Anything left? @SC90264 05333000
- BL SFCLNL1 Yes, keep looking @SC90264 05333500
- SFCLNL2 DS 0H @SC90264 05334000
- LA 14,1(,14) Skip over leading blanks, too @SC90264 05334500
- CLI 0(14),C' ' Leading blanks? @SC90264 05335000
- BE *-8 @SC90264 05335500
- SR 15,14 Anything left? @SC90264 05336000
- BNP RTRN1 Nothing there @SC86299 05336500
- STM 14,15,GTPBPTRS Save ptrs for GETLIN @SC91121 05337000
- B RTRN0 @SC86295 05337500
- * 05338000
- * Test for stacked commands @SC86295 05338500
- * return code = number of stacked lines @SC86295 05339000
- SFCSTK DS 0H Go to RTRN1 if something stacked @SC90264 05339500
- ICM 1,15,GTPBPTRS+4 Length stacked for GETLIN @SC91121 05340000
- BP RTRN1 Something there, say at least 1 @SC91121 05340500
- B RTRN0 Nothing stacked @SC88095 05341000
- * 05341500
- * Log out @SC86295 05342000
- SFCKIL LR 3,13 @SC88026 05342500
- L 3,4(,3) Look back through save areas @SC88026 05343000
- CLC =A(USNTRF),16(3) Find main loop @SC89215 05343500
- BNE *-10 @SC88026 05344000
- L 3,8(,3) Ptr to main save area @SC88026 05344500
- OI KFLG-USNTRFSV(3),CMDC Set flag to quit @SC88026 05345000
- EXEC CICS START TRANSID('CSSF') TERMID(LOGNAM+4), @SC91150 05345500
- B RTRN0 Can't do any better @SC90264 05346000
- * 05346500
- * Wait specified time in R0 (sec) 05347000
- SFCWT CVD 0,TMPDW Convert to decimal @SC90264 05347500
- EXEC CICS DELAY INTERVAL(TMPDW+4), @SC90264 05348000
- SFCPRP B RTRN0 No action for prompting @SC87351 05348500
- * 05349000
- * Return time in centisec in R15 05349500
- SFCCLK STCK TMPDW Store TOD clock @SC89268 05350000
- LM 14,15,TMPDW @SC86295 05350500
- SLDL 14,8 Take mod 204 days @SC86295 05351000
- SRDL 14,20 Get in microsec @SC86295 05351500
- D 14,=F'10000' Get in centisec @SC86295 05352000
- B RTRN @SC86295 05352500
- * 05353000
- TITLE 'Typeout interceptor' 05353500
- * Entry: R1->message buffer, R0=length, R2-> ICPTYP, R15->ret, 05354000
- * R14-R5 saved in ICPRGS. 05354500
- * Exit: Message copied to storage. Registers restored. 05355000
- USING ICPTYP,2 @SC89268 05355500
- ICPTYP CLI ICPFL,2 Intercepting? @SC88026 05356000
- BE ICPGO Yes, do it @SC88026 05356500
- A 0,F3 Allow for SBA @SC90264 05357000
- STH 0,GTMLEN Length of buffer needed @SC90264 05357500
- EXEC CICS HANDLE CONDITION NOSTG, @SC90264 05358000
- EXEC CICS GETMAIN SET(3) LENGTH(GTMLEN), @SC90264 05358500
- EXEC CICS IGNORE CONDITION LENGERR, @SC90264 05359000
- LH 0,GTMLEN Get length again @SC90264 05359500
- LR 4,0 @SC90264 05360000
- S 4,F3 Allow for SBA @NL90264 05360500
- BCTR 4,0 @SC90264 05361000
- L 1,ICPRGS+12 Retrieve ptr to data @SC90264 05361500
- MVC 3(,3),0(1) Copy after SBA/CRLF @SC90264 05362000
- EX 4,*-6 @SC90264 05362500
- TM FSCTRMF,X'80' TTY? @SC90264 05363000
- BZ ICPTT1 Yes @SC90264 05363500
- EX 4,ICPTRDSP Eliminate dangerous characters @SC90264 05364000
- TM FSCOTP,X'FF' Flag for clearing screen? @SC90264 05364500
- BO ICPTF1 Yes, reformat it @SC90264 05365000
- S 0,F3 Adjust for SBA @SC90264 05365500
- AH 0,FSCOTP Current screen adr @SC90264 05366000
- CH 0,FSCEND Will it all fit? @SC90264 05366500
- BNH ICPTF2 Yes, do it @SC90264 05367000
- EXEC CICS CONVERSE FROM(ICPMORCC) FROMLENGTH(=Y(ICPMORL)), +05367500
- CTLCHAR(=X'C3') SET(4) TOLENGTH(FSCOTP), @SC90264 05368000
- ICPTF1 MVC FSCOTP,FSCBEG @SC90264 05368500
- EXEC CICS SEND FROM(ICPSETCC) LENGTH(=Y(ICPSETL)), @SC90264+05369000
- CTLCHAR(=X'C3') ERASE WAIT, @SC90264 05369500
- ICPTF2 LH 0,FSCOTP Current screen address @SC90264 05370000
- SRDL 0,6 @SC90264 05370500
- SLL 0,2 @SC90264 05371000
- SLDL 0,6 Convert to 12/14-bit format @SC90264 05371500
- STCM 0,3,1(3) @SC90264 05372000
- TR 1(2,3),PRTBLE @SC90264 05372500
- MVI 0(3),SBA Move to proper adr @SC90264 05373000
- LA 1,79 Round up to whole line @SC90264 05373500
- A 1,ICPRGS+8 @SC90264 05374000
- SR 0,0 @SC90264 05374500
- D 0,=F'80' @SC90264 05375000
- M 0,=F'80' Convert to address increment @SC90264 05375500
- CLC FSCOTP,FSCBEG @SC90264 05376000
- BE *+8 @SC90264 05376500
- AH 1,FSCOTP Rel. to old adr if not at top @SC90264 05377000
- STH 1,FSCOTP @SC90264 05377500
- EXEC CICS SEND FROM(0(,3)) LENGTH(GTMLEN) WAIT, @SC90264+05378000
- CTLCHAR(=X'C2'), @SC90264 05378500
- B ICPTZ Rejoin @SC90264 05379000
- ICPTT1 DS 0H TTY output @SC90264 05379500
- MVC 0(3,3),=AL1(CR,LF,XOFF) @SC90264 05380000
- EXEC CICS SEND FROM(0(,3)) LENGTH(GTMLEN) WAIT, @SC90264 05380500
- ICPTZ DS 0H @SC90264 05381000
- EXEC CICS FREEMAIN DATA(0(,3)), @NL90264 05381500
- B ICPTRET @SC87020 05382000
- ICPGO LM 3,4,TXTPTR+4 Output ptrs @SC86158 05382500
- SR 4,3 Length left @SC86158 05383000
- TM FSCTRMF,1 Just a prompt? @SC90264 05383500
- BO ICPTRET Yes, ignore it @SC90264 05384000
- LA 15,255 Limit @SC86158 05384500
- CLR 15,0 Buffer length @SC87020 05385000
- BNH *+6 Too big @SC86158 05385500
- LR 15,0 Ok, use it @SC87020 05386000
- LTR 15,15 @SC86158 05386500
- BNP ICPTRET @SC86283 05387000
- CR 15,4 Enough room? @SC86283 05387500
- BH ICPTRET No @SC86283 05388000
- BCTR 15,0 Set up for mvc @SC86158 05388500
- EX 15,ICPCOPY Move to WBUF @SC86158 05389000
- LA 3,2(15,3) New end @SC86158 05389500
- ST 3,TXTPTR+4 @SC86158 05390000
- ICPTRET LM 14,5,ICPRGS Restore @SC88026 05390500
- NI FSCTRMF,X'FE' Reset flag @SC90264 05391000
- BR 15 Return @SC86283 05391500
- ICPCOPY MVC 0(,3),0(1) @SC87020 05392000
- ICPTRDSP TR 3(,3),ICPDSP Convert to safe displayables @SC90264 05392500
- DROP 2 05393000
- * Table of printable equivalents for binary 6-bit numbers @SC90264 05393500
- PRTBLE DC C' ',9AL1(*-PRTBLE+192),7AL1(*-PRTBLE+64) @SC90264 05394000
- DC 9AL1(*-PRTBLE+192),8AL1(*-PRTBLE+64) @SC90264 05394500
- DC 8AL1(*-PRTBLE+192),6AL1(*-PRTBLE+64) @SC90264 05395000
- DC 10AL1(*-PRTBLE+192),6AL1(*-PRTBLE+64) @SC90264 05395500
- * Safely displayables @SC90264 05396000
- ICPDSP DC 64C'.',192AL1(*-ICPDSP) @SC90264 05396500
- * 05397000
- ICPMORCC DC AL1(SBA),X'5DE9',C'*MORE*' @SC90264 05397500
- ICPMORL EQU *-ICPMORCC @SC90264 05398000
- ICPSETCC DC AL1(SBA),X'5B60',AL1(IC,RTA),X'5DE800' @SC90264 05398500
- ICPERSL EQU *-ICPSETCC Blank cmd line @SC90264 05399000
- DC AL1(SBA),X'4040',AL1(SF),X'60' @SC90264 05399500
- DC AL1(SBA),X'5B5F',AL1(SF),X'40' @SC90264 05400000
- DC AL1(SBA),X'5DE8',AL1(SF),X'60',C'TTYsym' @SC90264 05400500
- ICPSETL EQU *-ICPSETCC @SC90264 05401000
- * 05401500
- LOCALS , @SC86295 05402000
- SFCPGM DS CL8 Name of program to execute @SC90264 05402500
- SFCSECPL DS 3A -> (name, string, ->length) @SC90264 05403000
- SUPFNC EXIT @SC86158 05403500
- TITLE 'GETLIN Routine - Get a line from terminal' @SC87015 05404000
- * Entry: R1->buffer of length 256 @SC87015 05404500
- * Exit: Buffer filled, R0=length, R15=0 if ok. Else R15=1. @SC87015 05405000
- GETLIN ENTER @SC87015 05405500
- LR 8,1 Save buffer ptr @SC88095 05406000
- LA 9,256 For copying @SC88095 05406500
- LM 6,7,GTPBPTRS Buffer adr and len @SC88095 05407000
- LTR 7,7 Already got something? @SC90264 05407500
- BP GTL1 Yes, return it @SC87015 05408000
- GTLRD LM 0,1,GTLPRPS Any prompt? @SC90264 05408500
- LTR 0,0 @SC90264 05409000
- BP GTLPRMPT @SC90264 05409500
- PTEXT ' ',AREG=1,LREG=0 @SC90264 05410000
- GTLPRMPT OI FSCTRMF,1 Responsive @SC90264 05410500
- BAL 15,WTEXT @SC90264 05411000
- EXEC CICS RECEIVE SET(6) LENGTH(GTMLEN) ASIS, @SC90264 05411500
- L 0,GTLBUFP @SC90264 05412000
- LA 1,256 Length of my buffer @SC90264 05412500
- LH 7,GTMLEN Length of data @SC90264 05413000
- CR 1,7 @SC90264 05413500
- BNH *+6 @SC90264 05414000
- LR 1,7 @SC90264 05414500
- STM 0,1,GTPBPTRS Buffer adr and len @SC90264 05415000
- MVCL 0,6 Copy input stuff to buffer @SC90264 05415500
- LM 6,7,GTPBPTRS Get adr and len again @SC90264 05416000
- L DFHEIBR,DFHEIBP Get ptr to data block @SC90264 05416500
- USING DFHEIBLK,DFHEIBR @SC90264 05417000
- TM FSCTRMF,X'80' TTY? @SC90264 05417500
- BZ GTLRDT Yes, skip fullscreen stuff @SC90264 05418000
- CLI EIBAID,X'6D' CLEAR? @SC90264 05418500
- BNE GTLRDF2 No, use it @SC90264 05419000
- MVI FSCOTP,X'FF' Flag for reformatting @SC90264 05419500
- B GTLRD @SC90264 05420000
- DROP DFHEIBR @SC90264 05420500
- GTLRDF2 A 6,F3 Space over SBA @SC90264 05421000
- S 7,F3 @SC90264 05421500
- LR 1,6 Copy command address @SC90264 05422000
- LTR 0,7 Anything there? @SC90264 05422500
- BNM GTLRDF3 Yes, ok @SC90264 05423000
- PTEXT ' ',AREG=1,LREG=0 No, display blanks @SC90264 05423500
- GTLRDF3 OI FSCTRMF,1 Indicate just copying @SC90264 05424000
- BAL 15,WTEXT @SC90264 05424500
- L 2,=A(ICPSETCC) Ptr to command string @SC90264 05425000
- EXEC CICS SEND FROM(0(,2)) LENGTH(=Y(ICPERSL)) WAIT, @SC90264+05425500
- CTLCHAR(=X'C3'), @SC90264 05426000
- GTLRDT DS 0H @SC90264 05426500
- GTL1 LTR 2,7 Length of text remaining @SC88095 05427000
- BNP GTLFRE None, return length 0 @SC88095 05427500
- LA 0,0(7,6) End of buffer @SC88095 05428000
- SR 4,4 @SC88095 05428500
- IC 4,LNDLM Get delimiter @SC88095 05429000
- LA 4,TRTBL(4) Ptr to delimiter char @SC88095 05429500
- MVI 0(4),1 Set up to snag delims @SC88095 05430000
- MVI TRTBL+C' ',0 And ignore blanks @SC88095 05430500
- CR 2,9 Get shorter of 256 and string @SC88095 05431000
- BNH *+6 @SC88095 05431500
- LR 2,9 @SC88095 05432000
- LA 1,0(2,6) End, in case no delim found @SC88095 05432500
- BCTR 2,0 Set up for EX @SC88095 05433000
- EX 2,GTLTRT @SC88095 05433500
- MVI 0(4),0 Now clear out table @SC88095 05434000
- MVI TRTBL+C' ',1 And restore @SC88095 05434500
- SR 1,6 Length of line @SC88095 05435000
- LR 7,1 Set up MVCL @SC88095 05435500
- CR 9,7 Get shorter of 256 and string @SC88095 05436000
- BNH *+6 @SC88095 05436500
- LR 9,7 @SC88095 05437000
- LR 2,9 Length actually copied @SC88095 05437500
- MVCL 8,6 @SC88095 05438000
- AR 6,7 In case we couldn't use it all @SC88095 05438500
- LA 6,1(,6) Skip over linend char @SC88095 05439000
- LR 7,0 @SC88095 05439500
- SR 7,6 New buffer length @SC88095 05440000
- GTLFRE DS 0H @SC90264 05440500
- STM 6,7,GTPBPTRS @SC88095 05441000
- GTLZ RETREG (0,2) Return (2) as R0 @SC89218 05441500
- B RTRN0 @SC87015 05442000
- GTLTRT TRT 0(,6),TRTBL Find a delimiter @SC88095 05442500
- LOCALS , @SC87015 05443000
- GETLIN EXIT , @SC87015 05443500
- TITLE 'TERMIO Routine - Handle terminal I/O' 05444000
- * R1 points to a pair of (adr,len) for read or write. If I/O is 05444500
- * successfull, R15 returns transferred byte count (else returns -1). 05445000
- * Command code is in R0: 05445500
- * 1 => Open line for I/O 4 => Write packet 05446000
- * 2 => Close line 5 => Read packet 05446500
- * 3 => Reset line status after ( 6 => Write message ) not used 05447000
- * environment changes 05447500
- * 05448000
- TERMIO ENTER 05448500
- SR 15,15 OK @SC86295 05449000
- BCT 0,TRMCLS @SC86295 05449500
- * Open terminal line for protocol 05450000
- * Ignore attention interrupts @SC90264 05450500
- MVI RIOC,X'80' Nothing saved @SC86295 05451000
- MVI TRMFLG,X'FF' Initialize w/r flag @SC87275 05451500
- B RTRN0 @SC86295 05452000
- * Close terminal line after protocol transfer 05452500
- TRMCLS BCT 0,TRMRSET @SC86295 05453000
- * @SC90264 05453500
- B RTRN0 @SC86295 05454000
- * (Re)set terminal characteristics to suit environment 05454500
- TRMRSET BCT 0,TRMRW @SC86295 05455000
- B RTRN0 @SC86295 05455500
- * 05456000
- * Perform I/O request 05456500
- TRMRW LR 8,1 Save ptr to plist @SC90264 05457000
- LM 2,3,0(8) Get address and length @SC90264 05457500
- BCT 0,TRMRD @SC87015 05458000
- CLI WRRD,0 Write/read? @SC87275 05458500
- BNE *+8 Yes @SC87275 05459000
- MVI TRMFLG,0 Indicate no action on follow-up @SC87275 05459500
- STH 3,GTMLEN Set up length @SC90264 05460000
- EXEC CICS SEND FROM(0(,2)) LENGTH(GTMLEN) WAIT, @SC90264 05460500
- B RTRN0 @SC87317 05461000
- * 05461500
- * Read from terminal 05462000
- TRMRD TS TRMFLG @SC87275 05462500
- BZ RTRN0 Just a follow-up. 0-length read @SC87275 05463000
- LM 2,3,0(8) Our buffer's adr and length @SC90264 05463500
- STH 3,GTMLEN @SC90264 05464000
- EXEC CICS HANDLE CONDITION LENGERR(RTRNM1), @SC90264 05464500
- EXEC CICS RECEIVE INTO(0(,2)) LENGTH(GTMLEN) ASIS, @SC90264 05465000
- LH 15,GTMLEN Get length for return @SC90264 05465500
- B RTRN @SC90264 05466000
- LOCALS , @SC86295 05466500
- EXIT 05467000
- TITLE 'SCRNIO Routine - Handle screen I/O via Series/1' 05467500
- * R1 points to a pair of (adr,len) for read or write. If I/O is 05468000
- * successfull, R15 returns transferred byte count (else returns -1). 05468500
- * Command code is in R0: 05469000
- * 0 => Clear screen on console (not comm line) @SC90045 05469500
- * 1 => Open screen for I/O 4 => Write packet (gets ATTN) 05470000
- * 2 => Close line 5 => Read packet 05470500
- * 3 => Reset screen status after 6 => Write message (no ATTN) 05471000
- * environment changes 7 => Read screen buffer 05471500
- * 05472000
- SCRNIO ENTER 05472500
- LA 8,SCRPLST Get PLST ptr @SC90222 05473000
- LTR 0,0 @SC90045 05473500
- BZ SCRCLR @SC90045 05474000
- LR 6,1 Save ptr to plist @SC90222 05474500
- STC 0,CONSOPR Save command code @LP88158 05475000
- BCT 0,SCRCLS @SC86295 05475500
- * Set up for transparent I/O 05476000
- L 1,=A(IDEFS) CSECT of initializations @SC90173 05476500
- USING DEFS,1 Mapped via DSECT @SC90173 05477000
- LA 2,S1DATA Series/1 introducer @SC90173 05477500
- LA 3,S1ORDL+2 Length + 2 @SC90173 05478000
- CLI TRMTP,C'S' @SC90173 05478500
- BE SCRPRSET Do it @SC90173 05479000
- LA 2,GRDATA Graphics introducer @SC90173 05479500
- LA 3,GRDL+2 Length + 2 @SC90173 05480000
- CLI TRMTP,C'G' @SC90173 05480500
- BE SCRPRSET Do it @SC90173 05481000
- LA 2,AEADAT AEA introducer @SC90173 05481500
- LA 3,AEAL+2 @SC90173 05482000
- DROP 1 @SC90173 05482500
- SCRPRSET LR 5,3 @SC90173 05483000
- LA 4,S1EOL+2 Get start of command buffer @SC90173 05483500
- SR 4,5 @SC90173 05484000
- STM 4,5,S1XOPL Set up prompt plist @SC90173 05484500
- S 5,F2 Deduct stuff already there @SC90173 05485000
- MVCL 4,2 @SC90173 05485500
- * MVI SCRLST,0 Clear op code @SC88091 05486000
- MVI RIOC,X'80' Nothing saved @SC86295 05486500
- * Full-screen mode @SC90264 05487000
- B SCRCLRX @SC90045 05487500
- SCRCLR CLI TRMTP,C'T' Is it a TTY terminal? @SC90045 05488000
- BE RTRN0 Yes, can't clear screen @SC90045 05488500
- CLI TRMTP,C'V' Is it a TTY terminal? @SC90045 05489000
- BE RTRN0 Yes, can't clear screen @SC90045 05489500
- TM FL2,PROTO In protocol mode? @SC90045 05490000
- BO RTRN0 Yes, skip clearing screen @SC90045 05490500
- SCRCLRX LA 8,SCRCCWCL Clear-screen plist @SC90045 05491000
- BAL 9,SCRNEX Do it @SC90045 05491500
- MVI FSCOTP,X'FF' Flag for clearing @SC90264 05492000
- B RTRN0 @SC86295 05492500
- SCRCCWCL DC C'E',AL3(0),XL4'0' Erasure @SC90264 05493000
- * 05493500
- * Clean up after I/O 05494000
- SCRCLS BCT 0,SCRRSET @SC86295 05494500
- B SCRCLRX Clear screen @SC90045 05495000
- * 05495500
- * (Re)set device characteristics to suit environment 05496000
- SCRRSET BCT 0,SCRRW @SC86295 05496500
- B RTRN0 05497000
- * 05497500
- * Perform I/O request 05498000
- * R6-> (adr,len); R0=1 if write, 2 if read, 3 if message. @SC90264 05498500
- SCRRW DS 0H @SC90222 05499000
- MVC 0(8,8),0(6) Copy plist @SC90264 05499500
- STC 0,0(,8) Set operation code (arbitrary) @SC90264 05500000
- CLI TRMTP,C'A' AEA? @SC90264 05500500
- BNE *+8 No, use those codes @SC90264 05501000
- OI 0(8),X'80' Mark this different @SC90264 05501500
- BAL 9,SCRNEX Execute internal subr @SC86295 05502000
- TM CONSOPR,1 Read request? @SC90264 05502500
- BO SCRRDZ Yes, get length @SC90264 05503000
- ICM 1,15,SCRRC Check return code @SC90222 05503500
- BNZ RTRNM1 If error, say so @SC90222 05504000
- B RTRN0 Return @SC86299 05504500
- SCRRDZ LR 15,5 @LP88186 05505000
- S 15,WRCMDL+4 Deduct 3 for buffer adr @SC90173 05505500
- B RTRN Return @SC86299 05506000
- * 05506500
- * SCRLOG: Hexadecimal log of (R2) bytes at address (R1) @LP88158 05507000
- * Log label is taken from R0 low order byte. @SC89166 05507500
- * Return via R7. R0-R3 and R15 destroyed. @SC89166 05508000
- SCRLOG TM FL1,DEBUG Logging in effect? @SC87286 05508500
- BZR 7 No, that's all @SC89166 05509000
- TM DBGFLG,DBGIO I/O stuff requested? @SC88168 05509500
- BZR 7 No, skip it @SC89166 05510000
- L 3,LOGBUF Ptr to buffer @LP88158 05510500
- STC 0,0(,3) Set log label @SC89166 05511000
- LA 3,2(,3) Start of data area @SC91172 05511500
- TM DBGFLG,DBGTI Times requested? @SC91172 05512000
- BZ SCRLOGA No, just do hex dump @SC91172 05512500
- ST 1,SCRLR1 Save ptr to block @SC91172 05513000
- BAL 14,ACCTTOD Get time of day in seconds @SC91172 05513500
- MVI 0(3),C' ' Leave a space @SC91172 05514000
- KCALL DUMPTOD,1(3) Format time into buffer @SC91172 05514500
- LR 3,15 Get ptr to end of string @SC91172 05515000
- L 1,SCRLR1 Restore R1 @SC91172 05515500
- SCRLOGA LA 0,6*9(,3) End of line buffer @SC91172 05516000
- TM DBGFLG,DBGLO Long buffer requested? @SC90222 05516500
- BZ *+8 @SC90222 05517000
- LA 0,50*9(,3) Yes, long buffer @SC91172 05517500
- SCRLOGLP MVI 0(3),C' ' Add for readability @LP88158 05518000
- UNPK 1(9,3),0(5,1) Unpack into buffer @SC88168 05518500
- TR 1(8,3),TRHEX Convert to printable hex @SC88168 05519000
- LA 3,9(3) Advance text ptr @SC88168 05519500
- LA 1,4(1) and data source @LP88158 05520000
- S 2,F4 Finished data? @SC88168 05520500
- BNP SCRLGEND Yes, go write @LP88158 05521000
- CR 3,0 Reached text limit? @LP88158 05521500
- BL SCRLOGLP no, loop for more slices @LP88158 05522000
- MVC 0(3,3),=C'...' Show incomplete @LP88158 05522500
- LA 3,3(3) @SC88168 05523000
- SCRLGEND DS 0H @LP88158 05523500
- AR 2,2 Check for incomplete slice @SC88168 05524000
- BNM *+6 No, ok @SC88168 05524500
- AR 3,2 Yes, adjust end of text @SC88168 05525000
- S 3,LOGBUF Get length of text @SC88168 05525500
- WRITF LOGPTR,BSIZE=(3) Log it @LP88158 05526000
- TM DBGFLG,DBGSV SAVE requested? @SC88168 05526500
- BZR 7 No, skip closing log file @SC89166 05527000
- SAVEF LOGPTR Update disk directory @SC88168 05527500
- BR 7 @SC89166 05528000
- * 05528500
- *----- perform screen I/O operation, add to debug log ---------@SC90264 05529000
- * Entry: R8-> X'code',AL3(adr),F'length', R9-> return @SC90264 05529500
- * Exit: uses 0,1,2,3,5,7,14; data length in R15 or -1 if error @SC90264 05530000
- SCRNEX LR 1,8 Get plist ptr @SC90222 05530500
- SLR 2,2 Convert op. code to log label @LP88158 05531000
- IC 2,CONSOPR @LP88158 05531500
- LA 2,CONSOPRS(2) @LP88158 05532000
- IC 0,0(,2) @SC89166 05532500
- LA 2,8 Size of plist @SC90264 05533000
- BAL 7,SCRLOG Log it @SC90222 05533500
- LM 2,3,0(8) Data ptr and len @SC90264 05534000
- TM 0(8),1 Write of some sort? @SC90264 05534500
- BZ SCRNEXR No, read @SC90264 05535000
- * Write... @SC90264 05535500
- STH 3,GTMLEN Length of buffer needed @SC90264 05536000
- LR 5,3 Save for logging @SC90264 05536500
- CLI 0(8),C'E' Clear screen? @SC90264 05537000
- BNE SCRNEXW0 No @SC90264 05537500
- EXEC CICS SEND CONTROL ERASE FREEKB, Yes, do it @NL90264 05538000
- B SCRNEXW2 @SC90264 05538500
- SCRNEXW0 DS 0H @SC90264 05539000
- CLI 0(8),X'81' WRITE STRUCTURED FIELD? @SC90264 05539500
- BNE SCRNEXW1 No, just WRITE @SC90264 05540000
- EXEC CICS SEND STRFIELD WAIT FROM(0(,2)) LENGTH(GTMLEN), 05540500
- B SCRNEXW2 @SC90264 05541000
- SCRNEXW1 DS 0H @SC90264 05541500
- MVI SCRCTLCH,X'C2' Unlock kbd normally @SC91039 05542000
- CLI CONSOPR,6 Write message? @SC91039 05542500
- B *+8 (BNE) $$$$$$$$ for now $$$$$$$$ @SC91039 05543000
- MVI SCRCTLCH,X'C1' Yes, lock it to prevent clash @SC91039 05543500
- EXEC CICS SEND WAIT FROM(0(,2)) LENGTH(GTMLEN), @SC91039+05544000
- CTLCHAR(SCRCTLCH), @SC91039 05544500
- SCRNEXW2 DS 0H @SC90264 05545000
- B SCRNEXZ @SC90264 05545500
- * Read... @SC90264 05546000
- SCRNEXR LA 5,3 Normal length: AID + cursor adr @SC91150 05546500
- CLI SCRLSTIO,X'81' WRT STR FLD? @SC91150 05547000
- BNE *+8 No, fine @SC91150 05547500
- LA 5,1 Yes, expect only the AID @SC91150 05548000
- SR 3,5 @SC91150 05548500
- STH 3,GTMLEN Length of buffer needed @SC90264 05549000
- LA 7,0(5,2) Ptr to data portion @SC91150 05549500
- EXEC CICS HANDLE CONDITION LENGERR(RTRNM1), @SC90264 05550000
- CLI CONSOPR,7 @SC90264 05550500
- BE SCRNEXR1 @SC90264 05551000
- EXEC CICS RECEIVE INTO(0(,7)) LENGTH(GTMLEN) ASIS, @SC91150 05551500
- B SCRNEXR2 @SC90264 05552000
- SCRNEXR1 EXEC CICS RECEIVE INTO(0(,7)) LENGTH(GTMLEN) ASIS, @SC91150+05552500
- BUFFER, @SC90264 05553000
- SCRNEXR2 DS 0H @SC90264 05553500
- L DFHEIBR,DFHEIBP @SC90264 05554000
- USING DFHEIBLK,DFHEIBR @SC90264 05554500
- MVC 0(1,2),EIBAID Reconstruct data stream @SC90264 05555000
- C 5,F1 @SC91150 05555500
- BNH *+10 @SC91150 05556000
- MVC 1(2,2),EIBCPOSN in our buffer @SC90264 05556500
- DROP DFHEIBR @SC90264 05557000
- AH 5,GTMLEN Data length reconstructed @SC91150 05557500
- SCRNEXZ SR 15,15 For now... @SC90264 05558000
- SCRNEXZZ ST 15,SCRRC @SC90222 05558500
- MVC SCRLSTIO,0(8) Save code of last I/O @SC91150 05559000
- LTR 15,15 @SC90222 05559500
- BZ SCRNEXD Ok, log data @SC90222 05560000
- LA 1,SCRRC @SC90222 05560500
- LA 2,4 @SC90222 05561000
- LA 0,C'e' "Error" label @SC90222 05561500
- BAL 7,SCRLOG Log the return code @SC90222 05562000
- SCRNEXD L 1,0(,8) Data address @SC90222 05562500
- LA 0,C'd' "Data" label @SC89166 05563000
- LR 2,5 Data size @SC90222 05563500
- BAL 7,SCRLOG Log data @SC90222 05564000
- LR 15,5 @LP88186 05564500
- BR 9 Return to caller @LP88186 05565000
- * 05565500
- CONSOPRS DC C'?ocswrmg' Console command labels for log @SC91150 05566000
- LOCALS , @SC86299 05566500
- SCRPLST DS 2F Control block @SC90264 05567000
- SCRRC DS F Return code from PUT/GET @SC90222 05567500
- SCRLR1 DS F Saved R1 in SCRLOG @SC91172 05568000
- CONSOPR DS XL1 Current I/O operation @SC89180 05568500
- SCRCTLCH DS X WCC for next output op @SC91039 05569000
- SCRNIO EXIT , @SC86299 05569500
- TITLE 'SETMSG Routine - controls CP breakin' 05570000
- * Entry: R1 selects operation 05570500
- * Exit: R15=0 if ok 05571000
- * 1-> Analyze user environment, determine if suitable. 05571500
- * Save quantities needed and condition line for entering commands. 05572000
- * Perform any system-dependent initialization. 05572500
- * 2-> Condition line for protocol transfers. 05573000
- * 3-> Decondition line at end of transfer. 05573500
- * 4-> System-dependent clean-up at exit. 05574000
- * 5-> Reperform system-dependent initialization after SET LINE. 05574500
- * 05575000
- IC EQU X'13' Insert Cursor @SC90264 05575500
- SF EQU X'1D' Start Field @SC90264 05576000
- SETMSG ENTER , @SC87015 05576500
- BCT 1,STM2 Go if R1 not 1, so no init 05577000
- OI FL1,REN Set "WARN" ON @SC90264 05577500
- MVI CLSNFL,C'R' (both ways) @SC90264 05578000
- MVI DESTL+1,1 Set to default @SC90264 05578500
- MVI DEST,C'*' @SC90264 05579000
- EXEC CICS ADDRESS CSA(1), @SC90264 05579500
- ST 1,CSAPTR Save ptr to CSA @SC90264 05580000
- L 15,CSATSATA-DFHCSABA(,1) @SC91150 05580500
- USING DFHTSMAP,15 @SC91150 05581000
- MVC KTSBPSEG,TSMBPSEG Log(seg size) @SC91150 05581500
- MVC KTSGIDNE,TSMGIDNE Number of entries per TSGID @SC91150 05582000
- DROP 15 @SC91150 05582500
- EXEC CICS ASSIGN, @SC90264.05583000
- OPID(COPID), @LM90264.05583500
- SYSID(CSYSID), @LM90264.05584000
- SCRNHT(CSCRNHT), @LM90264.05584500
- SCRNWD(CSCRNWD), @LM90264.05585000
- TERMCODE(TCTTETT), @SC90264 05585500
- CLI TCTTETT,X'40' TTY? @SC90264 05586000
- BL *+8 Yes @SC90264 05586500
- OI FSCTRMF,X'80' No, mark it fullscreen @SC90264 05587000
- L DFHEIBR,DFHEIBP @SC90264 05587500
- USING DFHEIBLK,DFHEIBR @SC90264 05588000
- MVC LOGNAM+4(4),EIBTRMID Copy termid for uniqueness@SC90264 05588500
- MVC REPNAM+4(4),EIBTRMID Ditto @SC90264 05589000
- ICM 2,15,DFHEICAP Any comm area? @SC90264 05589500
- BZ STM1REC No, issue a read @SC90264 05590000
- LH 1,EIBCALEN Length of comm area? @SC90264 05590500
- LTR 1,1 @SC90264 05591000
- BZ STM1REC Zero, issue a read @SC90264 05591500
- CH 1,=H'256' Max allowed in buffer @SC91150 05592000
- BNH *+8 @SC91150 05592500
- LH 1,=H'256' Use max for length @SC91150 05593000
- STH 1,LINLEN Ok, use the commarea as command @SC90264 05593500
- LR 3,1 Set up MVCL @SC91150 05594000
- L 0,GTLBUFP @SC91150 05594500
- MVCL 0,2 Copy string to input cmd buffer @SC91150 05595000
- B STM1RECZ Done setup of command @SC90264 05595500
- DROP DFHEIBR @SC90264 05596000
- STM1REC DS 0H @SC90264 05596500
- MVC LINLEN,=H'256' @SC90264 05597000
- L 2,GTLBUFP Get invocation buffer @SC90264 05597500
- EXEC CICS IGNORE CONDITION LENGERR, @SC90264 05598000
- EXEC CICS RECEIVE INTO(0(,2)) LENGTH(LINLEN) ASIS, @SC90264 05598500
- STM1RECZ DS 0H @SC90264 05599000
- MVI FSCOTP,X'FF' Flag for reformatting fullscreen @SC90264 05599500
- L 2,QFNBP Ptr to ring of QFN buffers @SC90264 05600000
- ST 2,QFNPTR 1st buffer to use @SC90264 05600500
- LA 3,3-1 Number - 1 of buffers @SC90264 05601000
- LA 4,QFNSIZ+4(,2) Chain together @SC90264 05601500
- STCM 4,15,QFNSIZ(2) @SC90264 05602000
- LR 2,4 @SC90264 05602500
- BCT 3,*-10 Loop over buffers @SC90264 05603000
- MVC QFNSIZ(4,2),QFNPTR Complete the ring @SC90264 05603500
- SETUSER , @SC90264 05604000
- KCALL KFLCWD,DESTL @SC90264 05604500
- B STM5X @SC90173 05605000
- * 05605500
- STM2 BCT 1,STM3 Go if R1 was not 2, so not off 05606000
- * @SC90264 05606500
- TM FL1,TSTF @SC86295 05607000
- BO RTRN0 Just testing, don't change it @SC86295 05607500
- * @SC90264 05608000
- B STMD 05608500
- * 05609000
- STM3 BCT 1,STM4 @SC86316 05609500
- * @SC90264 05610000
- STMD DS 0H @SC86316 05610500
- B RTRN0 05611000
- * 05611500
- STM4 BCT 1,STM5 Special clean-up @SC87351 05612000
- SR 0,0 @SC90264 05612500
- KCALL SCRNIO Clear screen if fullscreen @SC90264 05613000
- TM DSKFL,PLOAD Pgm loaded? @SC90264 05613500
- BZ STM4A @SC90264 05614000
- EXEC CICS RELEASE PROGRAM('IKXDYNAL') NOHANDLE, @SC90264 05614500
- STM4A DS 0H @SC90264 05615000
- KCALL KFLCWD,F0 Free all megablocks @SC90264 05615500
- B RTRN0 Special clean-up done @SC87296 05616000
- * 05616500
- STM5 DS 0H Re-init after SET LINE @SC87351 05617000
- MVI TRMTP,C'N' Assume bad until validated @SC90173 05617500
- CLI TRMLIN,C' ' External line? @SC87351 05618000
- BE STM5X No, use terminal @SC90173 05618500
- B RTRN1 Other lines not allowed @SC90173 05619000
- STM5X DS 0H Now set up controller type @SC90173 05619500
- MVI TRMTP,C'&KCONT' 1st assume TTY @SC88309 05620000
- TM FSCTRMF,X'80' TTY? @SC90264 05620500
- BZ STMSTY Yes @SC86299 05621000
- MVC WRCMDL+4(4),F3 Preset the length to skip @SC91150 05621500
- MVI TRMTP,C'S' Remember going via S/1 @SC87166 05622000
- L 8,RIOPTRS @SC90173 05622500
- XC 0(9,8),0(8) Zero out buffer @SC88203 05623000
- LA 0,1 @SC88203 05623500
- KCALL SCRNIO Clear screen and set up @SC88203 05624000
- LA 0,6 @SC88203 05624500
- KCALL SCRNIO,STMS1ST,E=(STM5SC,M) Issue status request@SC90173 05625000
- LA 0,7 @SC90264 05625500
- KCALL SCRNIO,RIOPTRS,E=(STM5SC,NP) Read back screen @SC91150 05626000
- CLC =X'5BBC',4(8) @SC90264 05626500
- BE STM5SC String appeared on screen, not S1 @SC91150 05627000
- LA 0,6 @SC91150 05627500
- KCALL SCRNIO,STMS1STI,E=(STM5SC,M) Again, with intrpt.@SC91150 05628000
- LA 0,5 @SC91150 05628500
- KCALL SCRNIO,RIOPTRS Read back screen @SC91150 05629000
- STM5SC DS 0H @SC90173 05629500
- LA 0,2 @SC88203 05630000
- KCALL SCRNIO Release screen @SC88203 05630500
- CLI 0(8),X'E4' Check for Yale status response @SC88203 05631000
- BE *+12 Ok, I trust @SC88294 05631500
- CLI 0(8),0 Other possibility @SC88294 05632000
- BNE STMGRP No, must be something else @SC88294 05632500
- CLI 3(8),X'11' @SC88203 05633000
- BNE STMGRP No, must be something else @SC88203 05633500
- CLC =X'2B5B5B',6(8) @SC88203 05634000
- BE RTRN0 Yes, all set @SC88203 05634500
- STMGRP MVI TRMTP,C'A' Assume AEA device @SC90173 05635000
- L 8,RIOPTRS @SC90173 05635500
- XC 0(9,8),0(8) Zero out buffer @SC90173 05636000
- LA 0,1 @SC90173 05636500
- KCALL SCRNIO Clear screen and set up @SC90173 05637000
- LA 0,4 @SC90173 05637500
- KCALL SCRNIO,STMAEAST,E=(STM5AC,M) Issue Read Part'n @SC90173 05638000
- LA 0,5 @SC90173 05638500
- KCALL SCRNIO,RIOPTRS Read back status @SC90173 05639000
- STM5AC DS 0H @SC90173 05639500
- LA 0,2 @SC90173 05640000
- KCALL SCRNIO Release screen @SC90173 05640500
- CLI 0(8),X'88' Check for WSF query reply @SC90173 05641000
- BNE STMGRG No, must be something else @SC90173 05641500
- CLC 3(2,8),=X'8180' Summary of replies 1st? @SC90173 05642000
- BNE STMGRG No, must be something else @SC90173 05642500
- SR 1,1 @SC90173 05643000
- ICM 1,3,1(8) Get length of reply @SC90173 05643500
- C 1,F64 @SC90173 05644000
- BNL STMGRN Too big, give up @SC90173 05644500
- LA 2,0(8,1) Point to end @SC90173 05645000
- STM5AL CLI 0(2),X'8F' OEM Aux device? @SC90173 05645500
- BE RTRN0 Yes, all set @SC90173 05646000
- BCTR 2,0 No, keep looking @SC90173 05646500
- BCT 1,STM5AL @SC90173 05647000
- STMGRN MVI TRMTP,C'N' Probably unsupported device @SC90173 05647500
- B RTRN0 That's all @SC90173 05648000
- STMGRG MVI TRMTP,C'G' Assume graphics device @SC90173 05648500
- B RTRN0 @SC90173 05649000
- STMSTY DS 0H Set up TTY mode @SC90264 05649500
- B RTRN0 @SC86295 05650000
- * 05650500
- STMS1ST DC A(STMS1ORD,L'STMS1ORD) @SC88203 05651000
- STMS1ORD DC X'2B5BBC' Yale ASCII status request @SC90264 05651500
- STMS1STI DC A(STMS1ORI,L'STMS1ORI) @SC91150 05652000
- STMS1ORI DC X'2B5BBE' Yale ASCII status w/ intrpt @SC91150 05652500
- STMAEAST DC A(STMAEAQP,STMAEAL) @SC90173 05653000
- STMAEAQP DC &AEACMD,X'000501FF02' Read Partition Query @SC90173 05653500
- STMAEAL EQU *-STMAEAQP @SC90173 05654000
- LOCALS , @SC86295 05654500
- TCTTETT DS 2X Terminal type and model codes @SC90264 05655000
- SETMSG EXIT 05655500
- TITLE 'DISKIO Routine - performs disk I/O functions' 05656000
- * ERRNUM unchanged unless there is a disk error. 05656500
- * Function selected on entry by R0: 05657000
- * 0=> unnum read: R1->FAB. Return R1->buffer,R0=# and remove the 05657500
- * sequence number (if any) from the buffer (used for TAKE files) 05658000
- * 1=> open (in): R1->pattern FDB, R2->name. Returns R0->FAB, R1->FDB 05658500
- * 2=> open (out): (same) 05659000
- * 3=> test name: R2->name. Returns R1->FDB if found (else R15=1) 05659500
- * 4=> close file: R1->adr(FAB). 05660000
- * 5=> set up search: R1->pattern name. 05660500
- * 6=> return next file in list: Returns R1->FDB + sets up FILNAM 05661000
- * 7=> close search (if any). 05661500
- * 8=> test CWD string: R1->string. Returns R15=0 if ok, else =1. 05662000
- * 9=> read: R1->FAB. Returns R15=12 if EOF, 0 if ok; R0=# data 05662500
- * 10=> write: R1->FAB. Returns R15=13 if disk full, 0 if ok. 05663000
- * 11=> test space: R1->pattern FDB (has size in Kbytes), 05663500
- * R2->name (used if FAB not found), R6->adr(FAB). Return R15=0 if ok. 05664000
- * 12=> analyze R/W error, set ERRNUM, make EMSG: R1->FAB, TMPDW=code 05664500
- * always returns R15=1 05665000
- * 13=> directory info on file: R1->name. Returns R15=0 if ok. 05665500
- * 14=> delete file: R1->name. Returns R15=0 if ok. 05666000
- * 15=> rename file: R1->name, R2->new name. Returns R15=0 if ok. 05666500
- * 16=> copy file: R1->name, R2->new name. Returns R15=0 if ok. 05667000
- * 17-> type file: R1-> name. Returns R15=0 if ok. 05667500
- * 21=> save file status in directory: R1->FAB. (not used) @SC88168 05668000
- * 22=> open library (in): R2->DDNAME. Return R15=0 if ok. @SC89073 05668500
- * 23=> point for next read, R1->adr(FDB), R2=records to skip. @SC89218 05669000
- * Return R15=0 if ok. @SC89218 05669500
- DISKIO ENTER 05670000
- USING DFHDCTDS,DCTCBAR Reinstate R8 addressing @SC90264 05670500
- USING FABD,3 @SC86295 05671000
- STC 0,DSKCOD Save for reference @SC88101 05671500
- SR 4,4 Signal no block assigned @SC86295 05672000
- LA 5,DISKIO+4095 @SC90264 05672500
- USING DISKIO+4095,5 Secondary base register @SC90264 05673000
- LR 15,0 @SC90264 05673500
- AR 15,15 @SC90264 05674000
- LH 15,DSK0(15) Get handler address @SC90264 05674500
- B DSK0(15) Do the function @SC90264 05675000
- DSK0 DC Y(DSKRED-DSK0,DSKOPNI-DSK0,DSKOPNO-DSK0) 0-2 @SC89073 05675500
- DC Y(DSKTEST-DSK0,DSKCLOS-DSK0,DSKNSET-DSK0) 3-5 @SC89073 05676000
- DC Y(DSKNXT-DSK0,DSKNSX-DSK0,DSKCWDF-DSK0) 6-8 @SC89073 05676500
- DC Y(DSKRED-DSK0,DSKWRT-DSK0,DSKTSP-DSK0) 9-11 @SC89073 05677000
- DC Y(DSKXXX-DSK0,DSKDIR-DSK0,DSKDEL-DSK0) 12-14 @SC89073 05677500
- DC Y(DSKRNM-DSK0,DSKCPY-DSK0,DSKTYP-DSK0) 15-17 @SC89073 05678000
- DC 3Y(DSKER1-DSK0) Spare utilities 18-20 @SC89073 05678500
- DC 2Y(DSKER1-DSK0),Y(DSKPNT-DSK0) 21-23 @SC89218 05679000
- DC 8Y(DSKER1-DSK0) spare @SC89073 05679500
- * 05680000
- * Open for input file whose name is at (R2), FDB at (R1) 05680500
- DSKOPNI BAL 9,DSKALC Get FAB @SC86295 05681000
- MVC FABCOMM,=CL8'OPEN I' @SC90264 05681500
- DSKOP0 BAL 2,DSKVALID See if allowed @SC90264 05682000
- BAL 2,DSKLKP Find file @SC90264 05682500
- BNZ DSKER1 Not found @SC86295 05683000
- BAL 14,DSKVALS @SC86295 05683500
- CLI DSKCOD,1 Just testing? @SC90264 05684000
- BNE RTRN0 Yes, we're done @SC90264 05684500
- CLI FDBFL2,X'40' Extra-partition queue? @SC90264 05685000
- BNE RTRN0 No, don't need to close it first @SC90264 05685500
- DSKTDCLO BAL 9,DSKTDOPE Close and open @SC90264 05686000
- B DSKER1 Oops @SC90264 05686500
- B RTRN0 @SC90264 05687000
- * 05687500
- DSKTDOPE MVC DSKEMTS,=CL15'SET Q( ) CLO' @SC90264 05688000
- MVC DSKEMTS+6(4),FABFNAM @ML90264 05688500
- EXEC CICS LINK PROGRAM('DFHEMTP') COMMAREA(DSKEMTS), @SC90264+05689000
- LENGTH(15) NOHANDLE, @SC90264 05689500
- BAL 14,DSKCHKER Test success @SC90264 05690000
- BNZR 9 Oops @SC90264 05690500
- MVC DSKEMTS+12(3),=CL3'OPE' @ML90264 05691000
- EXEC CICS LINK PROGRAM('DFHEMTP') COMMAREA(DSKEMTS), @SC90264+05691500
- LENGTH(15) NOHANDLE, @SC90264 05692000
- BAL 14,DSKCHKER Test success @SC90264 05692500
- BNZR 9 Oops @SC90264 05693000
- B 4(,9) Return and skip @SC90264 05693500
- * 05694000
- * Open for output file whose name is at (R2), FDB at (R1) 05694500
- DSKOPNO BAL 9,DSKALC Get FAB @SC86295 05695000
- MVC FABCOMM,=CL8'OPEN O' @SC90264 05695500
- BAL 2,DSKVALID See if allowed @SC90264 05696000
- OI FABIOF,1 Signal output access @SC90264 05696500
- BAL 2,DSKLKP Find file info @SC86295 05697000
- BNZ DSKOPLR Not found, just writing new @SC87012 05697500
- TM FDBFLGS,APPN+SVATT Should we keep attributes? @SC90033 05698000
- BZ *+8 No @SC90033 05698500
- BAL 14,DSKVALS Yes, copy old ones to FDB @SC90033 05699000
- TM FDBFLGS,APPN @SC86295 05699500
- BO DSKOPLR @SC90033 05700000
- MVC DSKSTT+FABUWORD-FABD(4),FABUWORD Provide word @SC91150 05700500
- ERASF FABFID Delete old @SC90264 05701000
- MVC FABUWORD,DSKSTT+FABUWORD-FABD Restore word @SC91150 05701500
- DSKOPLR LH 0,FDBLRC @SC88120 05702000
- CLI FDBRCF,C'V' RECFM F limited to LRECL @SC88120 05702500
- BNE DSKSTLR @SC88120 05703000
- CLI TYPFIL,C'B' Binary? @SC88120 05703500
- BE DSKSTLR4 Yes, always fold @SC91150 05704000
- TM FABFLGS,FABFPGM+FABFSPL Pipe, spool or QFN? @SC91150 05704500
- BNZ DSKSTLR4 Yes, be strict @SC91150 05705000
- TM FABFLGS,FABFTD TD queue? @SC91150 05705500
- BZ *+12 No, ok to use max @SC91150 05706000
- TM FDBFL2,TDEXTRBM Extra? @SC91150 05706500
- BO DSKSTLR4 Yes, must observe LRECL @SC91150 05707000
- L 0,MAXLRC TEXT file, no limit @SC87012 05707500
- DSKSTLR4 S 0,F4 Allow for RDW @SC91150 05708000
- DSKSTLR ST 0,FABLRTR Set effective record length @SC88120 05708500
- TM FABFLGS,FABFTAK @SC90264 05709000
- BZ RTRN0 @SC90264 05709500
- KCALL KFILIO,(3),E=DSKER1 @SC90264 05710000
- B RTRN0 @SC86295 05710500
- * 05711000
- * Test for existence of file whose name is at (R2) 05711500
- DSKTEST XC DSKFDB,DSKFDB @SC90264 05712000
- MVC DSKSTNM,0(2) @SC90264 05712500
- LA 3,DSKSTT @SC86295 05713000
- MVC FABCOMM,=CL8'TEST' @SC90264 05713500
- B DSKOP0 @SC86295 05714000
- * 05714500
- * Test validity using external routine @SC90264 05715000
- DSKVALID ICM 15,15,=A(KVALID) @SC90264 05715500
- BZR 2 @SC90264 05716000
- MVC FABRESP-FABD+DSKSTT(6),=X'123456' Odd err code @SC90264 05716500
- KCALL (15),(3),EXT,E=DSKER1 Quit if it says so @SC90264 05717000
- BR 2 @SC90264 05717500
- * 05718000
- * Close file whose ticket is at (R1), release block 05718500
- DSKCLOS ICM 3,15,0(1) Get FAB ptr, if any @SC86295 05719000
- BZ RTRN0 None, ignore @SC86295 05719500
- XC 0(4,1),0(1) Yes, now clear ticket @SC86295 05720000
- MVC FABCOMM,=CL8'CLOSE' @SC90264 05720500
- TM FABFLGS,FABFPGM+FABFSPL Pipe? @SC90264 05721000
- BZ *+8 @SC90264 05721500
- BAL 2,DSKLKPG Yes, handle closing @SC90264 05722000
- TM FABFLGS,FABFTAK Internal file? @SC90264 05722500
- BZ DSKCLOS2 @SC90264 05723000
- KCALL KFILIO,(3) Yes, handle closing @SC90264 05723500
- DSKCLOS2 DS 0H @SC90264 05724000
- * Close file @SC90264 05724500
- LR 1,3 @SC86295 05725000
- LA 0,FABDWDS @SC86295 05725500
- DMSFRET DWORDS=(0),LOC=(1) @SC86295 05726000
- B RTRN0 @SC86295 05726500
- * 05727000
- * Point past 1st N records of file at (R1) @SC89218 05727500
- DSKPNT ICM 3,15,0(1) Get ticket @SC89218 05728000
- BZ RTRN1 Not open @SC89218 05728500
- LR 3,1 @SC89218 05729000
- LTR 2,2 Number of records to skip @SC89218 05729500
- BNP RTRN0 Never mind @SC89218 05730000
- TM FABFLGS,FABFTS+FABFTAK Temp stor or TAKE? @SC90264 05730500
- BZ DSKPNTL No, must read to skip @SC90264 05731000
- STH 2,FABRN Yes, just set pointer @SC90264 05731500
- B RTRN0 @SC90264 05732000
- DSKPNTL READF 0(,3),E=RTRN1 Skip one @SC89218 05732500
- BCT 2,DSKPNTL ... until finished @SC89218 05733000
- B RTRN Return with completion code @SC89218 05733500
- * 05734000
- * Read from file whose ticket is at (R1) 05734500
- DSKRED LTR 3,1 Get FAB ptr @SC86299 05735000
- BNP RTRN1 Not defined anymore @SC86299 05735500
- LA 1,1 @SC90264 05736000
- AH 1,FABRN Bump record counter @SC90264 05736500
- STH 1,FABRN @SC90264 05737000
- MVC FABNORD,FDBLRC Set up length of reads @SC90264 05737500
- L 6,FDBBUFF Use real buffer @SC90264 05738000
- MVC FABCOMM,=CL8'READ' Op code for error message @SC90264 05738500
- TM FABFLGS,FABFTS Temp stor? @SC90264 05739000
- BO DSKREDS Yes, do it @SC90264 05739500
- TM FABFLGS,FABFTD TD queue? @SC90264 05740000
- BO DSKREDD Yes, do it @SC90264 05740500
- TM FABFLGS,FABFTAK Internal file? @SC90264 05741000
- BO DSKREDT Yes, do it @SC90264 05741500
- TM FABFLGS,FABFPGM+FABFSPL Pipe? @SC90264 05742000
- BZ DSKRER ??? @SC90264 05742500
- BAL 2,DSKLKPG Yes, handle it @SC90264 05743000
- B DSKRED2 @SC90264 05743500
- DSKREDS DS 0H @SC90264 05744000
- MVC FABCOMM,=CL8'READ TS' Op code for error message @SC90264 05744500
- EXEC CICS READQ TS QUEUE(FABFNAM) ITEM(FABRN), @SC90264+05745000
- INTO(0(,6)) LENGTH(FABNORD) NOHANDLE, @SC90264 05745500
- LA 0,X'01' ITEMERR for TS queue @SC90264 05746000
- B DSKRED1 @SC90264 05746500
- DSKREDT KCALL KFILIO,(3) @SC90264 05747000
- LTR 15,15 @SC90264 05747500
- LA 0,X'81' NOTFND for VSAM @SC90264 05748000
- B DSKRED2 @SC90264 05748500
- DSKREDD MVC FABCOMM,=CL8'READ TD' Op code for error message @SC90264 05749000
- EXEC CICS READQ TD QUEUE(FABFNAM) INTO(0(,6)), @SC90264+05749500
- LENGTH(FABNORD) NOHANDLE, @SC90264 05750000
- LA 0,X'01' QZERO for TD queue @SC90264 05750500
- DSKRED1 BAL 14,DSKCHKER Test success @SC90264 05751000
- DSKRED2 BNZ DSKRERX No, see if EOF @SC90264 05751500
- LH 7,FABNORD Actual length @SC90264 05752000
- L 1,FDBBUFF Ptr to data area @SC90264 05752500
- LM 14,15,FDBBUFF Get buffer and size @SC90264 05753000
- LR 0,7 Save length for number check @SC88101 05753500
- AR 7,1 End of record @SC86299 05754000
- CLI DSKCOD,0 NONUM? @SC88101 05754500
- BNE DSKREDC No, use everything @SC88101 05755000
- CLI FDBRCF,C'F' Fixed-length records? @SC88101 05755500
- BNE DSKREDV No, line numbers at start (if any)@SC88101 05756000
- CH 0,=H'80' See if F/80 @SC88101 05756500
- BNE DSKREDC No @SC88101 05757000
- MVZ NUMPAT(5),75(1) See if 76-80 are all numeric @SC88101 05757500
- CLC NUMPAT(5),=8C'0' @SC88101 05758000
- BNE DSKREDC No @SC88101 05758500
- S 7,F8 Yes, move the end back @SC88101 05759000
- B DSKREDC @SC88101 05759500
- DSKREDV LA 0,8(1) Is length at least 8? @SC88101 05760000
- CR 0,7 @SC88101 05760500
- BNL DSKREDC No, can't be numbered @SC88101 05761000
- MVZ NUMPAT(8),0(1) See if 1-8 all numeric @SC88101 05761500
- CLC NUMPAT(8),=8C'0' @SC88101 05762000
- BNE DSKREDC No, not numbered @SC88101 05762500
- LA 1,8(1) Yes, skip over number @SC88101 05763000
- DSKREDC DS 0H @SC88101 05763500
- SR 7,1 Revised length @SC86299 05764000
- LR 6,1 @SC86299 05764500
- CR 7,15 @SC90264 05765000
- BNL *+6 @SC86299 05765500
- LR 15,7 Buffer not filled @SC90264 05766000
- L 1,4(13) @SC86299 05766500
- ST 15,20(1) Return length in R0 @SC90264 05767000
- CLI DSKCOD,0 NONUM? @SC88101 05767500
- BNE *+8 @SC88101 05768000
- ST 14,24(,1) Yes, return R1 ptr @SC90264 05768500
- CR 14,6 Already in place? @SC90264 05769000
- BE *+6 Yes, don't copy @SC90264 05769500
- MVCL 14,6 Copy to buffer @SC90264 05770000
- B RTRN0 @SC86299 05770500
- * Test for successful completion of CICS command @SC90264 05771000
- DSKCHKER L 15,DFHEIBP Set up to copy EIB code @SC90264 05771500
- USING DFHEIBLK,15 @SC90264 05772000
- MVC FABRESP,EIBRCODE @SC90264 05772500
- CLC F0,FABRESP Ok? @SC90264 05773000
- BR 14 Return with CC @SC90264 05773500
- DROP 15 @SC90264 05774000
- * Error on input @SC90264 05774500
- DSKRER LA 15,1 Return code for ordinary error @SC90264 05775000
- DSKRER2 MVI ERRNUM,ERRDIE Disk I/O error @SC90264 05775500
- B RTRN Indicate error @SC90264 05776000
- DSKFUL LA 15,13 Indicate disk full @SC90264 05776500
- B DSKRER2 @SC90264 05777000
- * Error on read. See if just EOF @SC90264 05777500
- DSKRERX CLM 0,1,FABRESP R0 has code that means EOF @SC90264 05778000
- BNE DSKRER No, just ordinary error @SC90264 05778500
- * End of file on input. Don't close it yet. @SC86295 05779000
- DSKEOD LA 15,12 End return code @SC86295 05779500
- B RTRN @SC86295 05780000
- * 05780500
- * Write to file whose ticket is at (R1) 05781000
- DSKWRT LTR 3,1 Get FAB ptr @SC86299 05781500
- BNP RTRN1 Not defined anymore @SC86299 05782000
- LA 1,1 @SC90264 05782500
- AH 1,FABRN Bump record counter @SC90264 05783000
- STH 1,FABRN @SC90264 05783500
- LM 6,7,FDBBUFF Get buffer and size @SC90264 05784000
- STH 7,FABNORD Put length in temp var @SC90264 05784500
- MVC FABCOMM,=CL8'WRITE' Op code for error message @SC90264 05785000
- TM FABFLGS,FABFTS Temp stor? @SC90264 05785500
- BO DSKWRTS Yes, do it @SC90264 05786000
- TM FABFLGS,FABFTD TD queue? @SC90264 05786500
- BO DSKWRTD Yes, do it @SC90264 05787000
- TM FABFLGS,FABFTAK Internal file? @SC90264 05787500
- BO DSKWRTT Yes, do it @SC90264 05788000
- TM FABFLGS,FABFPGM+FABFSPL Pipe? @SC90264 05788500
- BZ DSKRER Huh? @SC90264 05789000
- BAL 2,DSKLKPG Yes, handle it @SC90264 05789500
- LA 0,X'10' NOSPACE code for Extra TD queues @SC90264 05790000
- B DSKWRT2 @SC90264 05790500
- DSKWRTS DS 0H @SC90264 05791000
- MVC FABCOMM,=CL8'WRIT TS' Op code for error message @SC90264 05791500
- TM FABFLGS,FABFMAIN Main storage? @SC90264 05792000
- BZ DSKWRTSA No, use AUX @SC90264 05792500
- EXEC CICS WRITEQ TS QUEUE(FABFNAM) FROM(0(,6)) MAIN, @SC90264+05793000
- LENGTH(FABNORD) NOHANDLE, @SC90264 05793500
- LA 0,X'08' NOSPACE code for TS queues @SC90264 05794000
- B DSKWRT1 Test success @SC90264 05794500
- DSKWRTSA EXEC CICS WRITEQ TS QUEUE(FABFNAM) FROM(0(,6)), @SC90264+05795000
- AUXILIARY LENGTH(FABNORD) NOHANDLE, @SC90264 05795500
- LA 0,X'08' NOSPACE code for TS queues @SC90264 05796000
- B DSKWRT1 Test success @SC90264 05796500
- DSKWRTT KCALL KFILIO,(3) @SC90264 05797000
- LTR 15,15 @SC90264 05797500
- LA 0,X'83' NOSPACE code for VSAM WRITE @SC90264 05798000
- B DSKWRT2 @SC90264 05798500
- DSKWRTD MVC FABCOMM,=CL8'WRIT TD' Op code for error message @SC90264 05799000
- EXEC CICS WRITEQ TD QUEUE(FABFNAM) FROM(0(,6)), @SC90264+05799500
- LENGTH(FABNORD) NOHANDLE, @SC90264 05800000
- LA 0,X'10' NOSPACE code for TD queues @SC90264 05800500
- DSKWRT1 BAL 14,DSKCHKER Test success @SC90264 05801000
- DSKWRT2 BZ RTRN0 @SC90264 05801500
- CLM 0,1,FABRESP NOSPACE? @SC90264 05802000
- BE DSKFUL Yes, treat it separately @SC90264 05802500
- B DSKRER No, catch-all I/O error @SC90264 05803000
- * 05803500
- * Analyze error: code in FABRESP @SC90264 05804000
- DSKXXX LR 3,1 @SC89073 05804500
- MVI ERRNUM,ERRDIE Set Kermit error code @SC87338 05805000
- L 2,EMSGP Ptr to msg buffer @SC87338 05805500
- MVC 0(8,2),FABCOMM Copy oprn name @SC87338 05806000
- MVC 8(2,2),=C'R=' @SC87338 05806500
- UNPK 10(13,2),FABRESP(7) Copy error code @SC90264 05807000
- TR 10(12,2),TRHEX Convert to hex @SC90264 05807500
- MVC EMSGL,=F'22' Length of string @SC90264 05808000
- B RTRN1 @SC87338 05808500
- * 05809000
- * Directory Info on file R1->name, return R15=0 if OK 05809500
- DSKDIR DS 0H @SC89073 05810000
- NI DSKFL,255-NFFND @SC90264 05810500
- NXTFSET E=DSKDRERR Set up search (name at R1) @SC88308 05811000
- DSKDRLP NXTF E=DSKDRZ Find next entry @SC88308 05811500
- LR 3,1 Move FDB ptr @SC90264 05812000
- SH 3,=Y(FDBD-FABD) Set up addressability @SC90264 05812500
- TM DSKFL,NFFND Found something already? @SC90264 05813000
- BO DSKDRL1 @SC90264 05813500
- WTEXT 'Name RFM LRECL #recs Kbytes Type +05814000
- Date/time' @SC91150 05814500
- OI DSKFL,NFFND Found something, at least one @SC88308 05815000
- DSKDRL1 DS 0H @SC90264 05815500
- LA 7,CMD Make attr list in buffer @SC90264 05816000
- LA 0,FFDSP Format the file name @SC90264 05816500
- KCALL FSPEC,FABFID @SC90264 05817000
- LA 2,20(,7) Allow enough room @SC90264 05817500
- DSKDRBL MVI 0(15),C' ' @SC90264 05818000
- LA 15,1(,15) @SC90264 05818500
- CR 15,2 @SC90264 05819000
- BNH DSKDRBL @SC90264 05819500
- MVC 1(1,2),FDBRCF RECFM, if any 05820000
- CLI 1(2),0 05820500
- BNE *+8 05821000
- MVI 1(2),C'?' 05821500
- LA 2,2(,2) 05822000
- LH 0,FDBLRC 05822500
- BAL 9,DSKNUM Add the logical record length 05823000
- LH 0,FDBNREC @SC90264 05823500
- BAL 9,DSKNUM Add the record count @SC90264 05824000
- L 0,FDBSIZE @SC90264 05824500
- BAL 9,DSKNUM Add the file size @SC90264 05825000
- MVC 0(2,2),=CL2' ' Leave some blanks 05825500
- LA 2,2(,2) Bump the length @SC88308 05826000
- ICM 0,8,FDBFL2 05826500
- LA 15,4 @SC90264 05827000
- LA 6,DSKTYPS 05827500
- DSKDRTL LTR 0,0 05828000
- BM DSKDRTP 05828500
- LA 6,6(,6) 05829000
- SLL 0,1 05829500
- BCT 15,DSKDRTL @SC90264 05830000
- DSKDRTP MVC 0(6,2),0(6) 05830500
- LA 2,6(,2) 05831000
- CLI FDBDATE,X'19' Validate century @SC91150 05831500
- BL DSKDRDZ No good! @SC91150 05832000
- CLI FDBDATE,X'20' @SC91150 05832500
- BH DSKDRDZ @SC91150 05833000
- MVC 0(DSKDRPTL,2),DSKDRPT @SC91150 05833500
- ED 0(DSKDRPTL,2),FDBDATE @SC91150 05834000
- LA 2,DSKDRPTL(,2) @SC91150 05834500
- DSKDRDZ DS 0H @SC91150 05835000
- * 05835500
- SR 2,7 Get the output length @SC90264 05836000
- WTEXT (7),(2) @SC90264 05836500
- B DSKDRLP @SC88308 05837000
- DSKDRPT DC C' ',4X'20',C'/',2X'20',C'/',2X'20',C' ' Date @SC91150 05837500
- DC 2X'20',C':',2X'20',C':',2X'20' Time @SC91150 05838000
- DSKDRPTL EQU *-DSKDRPT Length of pattern @SC91150 05838500
- * @SC88308 05839000
- DSKDRZ TM DSKFL,NFFND Any files found? @SC90264 05839500
- BO RTRN0 Yes, return gracefully @SC88308 05840000
- DSKDRERR B RTRN1 Not found or invalid @SC90264 05840500
- * 05841000
- DSKNUM CVD 0,TMPDW Pack the binary value 05841500
- OI TMPDW+7,15 Set zone 05842000
- UNPK 0(8,2),TMPDW Convert to printable 05842500
- LA 15,7(,2) Point to end of string @SC90264 05843000
- DSKNUM2 CLI 0(2),C'0' Remove leading zeros 05843500
- BNE DSKNUM3 except for the first one. 05844000
- MVI 0(2),C' ' 05844500
- LA 2,1(2) 05845000
- CR 2,15 @SC90264 05845500
- BL DSKNUM2 05846000
- DSKNUM3 LA 2,1(,15) Get the new ending address @SC90264 05846500
- BR 9 05847000
- * 05847500
- DSKTYPS DC C'INTRA ' 05848000
- DC C'EXTRA ' 05848500
- DC C'INDIR.' 05849000
- DC C'REMOTE' 05849500
- DC C'OTHER ' 05850000
- * 05850500
- * Delete file. R1-> name. Returns R15=0 if ok. 05851000
- DSKDEL DS 0H @SC89073 05851500
- LR 6,1 @SC90264 05852000
- LA 3,DSKSTT @SC86295 05852500
- MVC FABFID,0(6) Copy name into temp FAB @SC90264 05853000
- MVC FABCOMM,=CL8'DELETE' @SC90264 05853500
- BAL 2,DSKVALID See if allowed @SC90264 05854000
- TM FABFLGS,FABFPGM+FABFSPL Pipe? @SC90264 05854500
- BNZ DSKDELP Yes, do it @SC90264 05855000
- TM FABFLGS,FABFTAK Internal file? @SC90264 05855500
- BO DSKDELT Yes, do it @SC90264 05856000
- TM FABFLGS,FABFTS Temp stor? @SC90264 05856500
- BZ DSKDELD No, Transdat @SC90264 05857000
- EXEC CICS DELETEQ TS QUEUE(FABFNAM) NOHANDLE, @SC90264 05857500
- BAL 14,DSKCHKER Test success @SC90264 05858000
- BNZ RTRN1 Oops @SC90264 05858500
- B RTRN0 @SC90264 05859000
- DSKDELP BAL 2,DSKLKPG Handle it @SC90264 05859500
- BNZ RTRN1 Something was wrong @SC90264 05860000
- B RTRN0 @SC90264 05860500
- DSKDELT KCALL KFILIO,(3),E=RTRN1 @SC90264 05861000
- B RTRN0 @SC90264 05861500
- DSKDELD DS 0H @SC90264 05862000
- BAL 2,DSKLKP See if it's there @SC90264 05862500
- BNZ RTRN1 No, say error @SC90264 05863000
- TM TDDCTDT,TDINDTBM Intra-partition? @SC90264 05863500
- BZ DSKTDCLO No, shouldn't try to purge it @SC90264 05864000
- EXEC CICS DELETEQ TD QUEUE(FABFNAM) NOHANDLE, @SC90264 05864500
- BAL 14,DSKCHKER Test success @SC90264 05865000
- BNZ RTRN1 Oops @SC90264 05865500
- B RTRN0 @SC90264 05866000
- * 05866500
- * Rename file. R1-> name. R2-> new name. Returns R15=0 if ok. 05867000
- DSKRNM DS 0H @SC89073 05867500
- B RTRN1 05868000
- * 05868500
- * Copy file. R1-> name. R2-> new name. Returns R15=0 if ok. 05869000
- DSKCPY DS 0H @SC89073 05869500
- LR 6,1 Point to source file name @SC90264 05870000
- LR 7,2 Point to new name @SC90264 05870500
- NI FILFLGS,255-APPN Don't append @SC90264 05871000
- OI FILFLGS,SVATT Use old attributes on output @SC90264 05871500
- L 9,EMSGP Ptr to msg buffer @SC90264 05872000
- MVC 0(14,9),=C'File not found' In case OPEN dies @SC90264 05872500
- MVC EMSGL,=F'14' Length of string @SC90264 05873000
- OPENF I,(6),FILFDB,FILPTR,E=DSKCPXX @SC90264 05873500
- MVC 0(14,9),=C'File too short' In case POINTF dies @SC91150 05874000
- MVC EMSGL,=F'14' Length of string @SC91150 05874500
- POINTF FILPTR,IFOPTS-IFILE(6),E=DSKCPXX Skip if any @SC91150 05875000
- MVC 0(19,9),=C'Illegal output file' @SC90264 05875500
- MVC EMSGL,=F'19' Length of string @SC90264 05876000
- LR 3,0 Pass input FDB to output @SC90264 05876500
- OPENF O,(7),FDBD,DSKCPPTR,E=DSKCPXX @SC90264 05877000
- LR 3,0 Point to output FAB @SC90264 05877500
- DSKCPLP ICM 1,15,IFOPTS-IFILE(6) Get record counter @SC91150 05878000
- AL 1,F1 @SC91150 05878500
- STCM 1,15,IFOPTS-IFILE(6) Update record counter @SC91150 05879000
- CLM 1,15,IFOPTS+4-IFILE(6) Passed end? @SC91150 05879500
- BH DSKTYEOF Yes, quit now @SC91150 05880000
- L 7,WBUF Point to data buffer @SC91150 05880500
- READF FILPTR,BUFFER=(7),E=DSKTYP50 @SC91150 05881000
- CLI FDBRCF,C'F' Fixed? @SC90264 05881500
- BNE DSKCPWR No, just write what we got @SC90264 05882000
- CH 0,FDBLRC Yes, see if correct length @SC90264 05882500
- BE DSKCPWR Ok, do it @SC90264 05883000
- LR 8,0 No, save actual length @SC90264 05883500
- LH 0,FDBLRC Get correct length @SC90264 05884000
- BH DSKCPWR Was too much, just truncate @SC90264 05884500
- LR 9,0 @SC90264 05885000
- SR 9,8 Was too little, get length to pad @SC90264 05885500
- AR 8,7 @SC91150 05886000
- SR 15,15 @SC90264 05886500
- ICM 15,8,BLANK @SC90264 05887000
- MVCL 8,14 @SC90264 05887500
- DSKCPWR WRITF DSKCPPTR,BUFFER=(7),BSIZE=(0),E=DSKCPER @SC91150 05888000
- B DSKCPLP @SC90264 05888500
- * 05889000
- * Type file. R1-> name. Returns R15=0 if ok. 05889500
- * N.B. DSKCPPTR must be zero here to share code with DSKCPY @SC90264 05890000
- DSKTYP DS 0H @SC89073 05890500
- LR 6,1 Point to file name @SC90264 05891000
- L 9,EMSGP Ptr to msg buffer @SC90264 05891500
- MVC 0(14,9),=C'File not found' In case OPEN dies @SC90264 05892000
- MVC EMSGL,=F'14' Length of string @SC90264 05892500
- OPENF I,(6),FILFDB,FILPTR,E=DSKCPXX @SC90264 05893000
- LR 3,0 Point to FAB @PG88335 05893500
- MVC 0(14,9),=C'File too short' In case POINTF dies @SC91150 05894000
- MVC EMSGL,=F'14' Length of string @SC91150 05894500
- POINTF FILPTR,IFOPTS-IFILE(6),E=DSKCPXX Skip if any @SC91150 05895000
- LH 1,FDBLRC @PG88335 05895500
- CH 1,=H'130' Check record length !!! @PG88335 05896000
- BL DSKTYP20 @PG88335 05896500
- WTEXT 'Only first 130 characters displayed!' @PG88335 05897000
- DSKTYP20 ICM 1,15,IFOPTS-IFILE(6) Get record counter @SC91150 05897500
- AL 1,F1 @SC91150 05898000
- STCM 1,15,IFOPTS-IFILE(6) Update record counter @SC91150 05898500
- CLM 1,15,IFOPTS+4-IFILE(6) Passed end? @SC91150 05899000
- BH DSKTYEOF Yes, quit now @SC91150 05899500
- L 3,RBUF Point to data buffer @SC91150 05900000
- READF FILPTR,BUFFER=(3),E=DSKTYP50 @PG88335 05900500
- CH 0,=H'130' Record too long ? @PG88335 05901000
- BL DSKTYP30 @PG88335 05901500
- LA 0,129 Yes, truncate... @PG88335 05902000
- DSKTYP30 LTR 0,0 Is it null ? @PG88335 05902500
- BNZ DSKTYP35 @PG88335 05903000
- MVI 0(3),X'40' Then we must have at least @PG88335 05903500
- LA 0,1 one character to output @PG88335 05904000
- DSKTYP35 WTEXT (3) @PG88335 05904500
- B DSKTYP20 @PG88335 05905000
- DSKTYEOF L 15,F12 EOF code - hit end @SC91150 05905500
- DSKTYP50 C 15,F12 EOF code ? @PG88335 05906000
- LA 7,0 If so, no error @SC90264 05906500
- BE DSKTYP70 @PG88335 05907000
- DSKCPER ERRF , Analyze error code @SC90264 05907500
- DSKCPXX LA 7,1 Set return code @SC90264 05908000
- ICM 0,15,EMSGL Length of message @SC90264 05908500
- BNP DSKTYP70 @SC90264 05909000
- L 1,EMSGP @SC90264 05909500
- WTEXT (1),(0) Show error message @SC90264 05910000
- DSKTYP70 CLOSF FILPTR @PG88335 05910500
- CLOSF DSKCPPTR @SC90264 05911000
- LR 15,7 Copy return code @SC90264 05911500
- B RTRN @SC90264 05912000
- * 05912500
- * Return on error, release useless block, if any 05913000
- DSKER1 LTR 1,4 Any block assigned? @SC86295 05913500
- BZ RTRN1 No @SC86295 05914000
- LA 0,FABDWDS Yes, release it @SC86295 05914500
- DMSFRET DWORDS=(0),LOC=(1) @SC86295 05915000
- B RTRN1 Flag error @SC86295 05915500
- * 05916000
- * Allocate new FAB and initialize with name at (R2) and with @SC90264 05916500
- * FDB pattern at (R6); put name in DSKSTT; return FAB,FDB @SC90264 05917000
- * ptrs to DISKIO caller as R0,R1; leave R3->FAB, R4->FAB, @SC90264 05917500
- * R6->pattern; return via R9. @SC90264 05918000
- DSKALC LR 6,1 Save FDB ptr @SC90264 05918500
- MVC DSKSTNM,0(2) @SC86295 05919000
- LA 0,FABDWDS Yes, release it @SC86295 05919500
- DMSFREE DWORDS=(0),ERR=DSKER1 @SC86295 05920000
- LR 3,1 New block ptr @SC86295 05920500
- LA 4,FDBD FDB pointer @SC88120 05921000
- RETREG (0,3),(1,4) Return (3) as R0, (4) as R1 @SC89218 05921500
- LR 4,3 Indicate we have it @SC88120 05922000
- XC 0(8*FABDWDS,3),0(3) @SC86295 05922500
- MVC FDBD(FDBCOP),0(6) Copy user's FDB @SC90264 05923000
- MVC FABFID,0(2) @SC90264 05923500
- BR 9 @SC86295 05924000
- * 05924500
- * Look up file whose name is in FAB; return CC=Z if found. @SC90264 05925000
- * Return via R2. Uses R0,R1,R8,R9,R14,R15. @SC90264 05925500
- * Leaves DSKSECPL -> TDDCT or TSUTE or KFSBLK @SC90264 05926000
- DSKLKP DS 0H @SC90264 05926500
- TM FABFLGS,FABFTD TD queue? @SC90264 05927000
- BO DSKLKPD Yes, do it @SC90264 05927500
- TM FABFLGS,FABFPGM+FABFSPL Pipe? @SC90264 05928000
- BNZ DSKLKPG Yes, do it @SC90264 05928500
- TM FABFLGS,FABFTAK Internal file? @SC90264 05929000
- BO DSKLKTK Yes, do it @SC90264 05929500
- TM FABFLGS,FABFTS TS queue? @SC90264 05930000
- BZ DSKLKNF No, something is wrong @SC90264 05930500
- MVI FDBRCF,C'V' Enforce RECFM=V @SC91150 05931000
- L 1,CSAPTR @NL90264 05931500
- L 9,CSATSMTA-DFHCSABA(1) A(temp storage table) @NL90264 05932000
- USING DFHTSUT,9 @SC90264 05932500
- USING DFHTSUTE,1 @SC90264 05933000
- DSKLKPSL LTR 9,9 @SC90264 05933500
- BZ DSKLKNF Not found @SC90264 05934000
- CLC TSUTCC,F0 Test for no entries @SC90264 05934500
- BE DSKLKPSN @SC90264 05935000
- L 1,TSUTAHI First on chain @SC90264 05935500
- DSKLKPS1 CLC TSUTEID,FABFNAM Match? @SC90264 05936000
- BE DSKLKSG Found it @SC90264 05936500
- C 1,TSUTALI Any more on chain? @SC90264 05937000
- BNL DSKLKPSN @SC90264 05937500
- LA 1,TSUTELN(,1) Check next entry @SC90264 05938000
- B DSKLKPS1 @SC90264 05938500
- DSKLKPSN L 9,TSUTFC @SC90264 05939000
- B DSKLKPSL @SC90264 05939500
- DSKLKSG ST 1,DSKSECPL Ptr to TSUTE @SC90264 05940000
- TM TSUTETC,TSUTEGID Is group id bit on? @ML90264 05940500
- BO DSKLKFND Yes, all is well @SC90264 05941000
- CLC FABCOMM(5),=CL8'OPEN I' @SC90264 05941500
- BE DSKER1 Don't do it after all @SC90264 05942000
- DSKLKFND CLR 2,2 Set CC=Z @SC90264 05942500
- BR 2 @SC90264 05943000
- DSKLKNF CLI *,0 Indicate error @SC90264 05943500
- BR 2 @SC90264 05944000
- DROP 1,9 @SC90264 05944500
- DSKLKPD L 1,CSAPTR @SC90264 05945000
- L DCTCBAR,CSADCTBA-DFHCSABA(,1) Start of DCT table@SC90264 05945500
- DSKLKPL CLI TDDCTDID,254 Reached end? @SC90264 05946000
- BHR 2 Yes, return CC=H @SC90264 05946500
- CLC TDDCTDID,FABFNAM Found match? @SC90264 05947000
- BE DSKLKDI Yes, verify contents @SC90264 05947500
- AH DCTCBAR,TDDCTELN No, on to next item @SC90264 05948000
- B DSKLKPL @SC90264 05948500
- DSKLKDI ST DCTCBAR,DSKSECPL Ptr to DCT @SC90264 05949000
- MVC FDBFL2,TDDCTDT Copy flags so we'll remember @SC91150 05949500
- TM TDDCTDT,TDINDTBM INTRA? @SC90264 05950000
- BZ DSKLKDX No, check EXTRA @SC90264 05950500
- CLC TDDCTTQC,F0 Yes, any records in it? @SC90264 05951000
- BE DSKLKNF None, say "not found" @SC90264 05951500
- B DSKLKFND @SC90264 05952000
- DSKLKDX TM TDDCTDT,TDEXTRBM EXTRA? @SC90264 05952500
- MVI FDBRCF,C'V' Enforce RECFM=V if INTRA @SC91150 05953000
- BZR 2 No, say "found" @SC90264 05953500
- L 15,TDDCTSDS Ptr to SDSCI @SC90264 05954000
- USING DCTSDSCI,15 @SC90264 05954500
- MVC FDBXRCF,DCTSDSRF RECFM from extra TD @SC90264 05955000
- MVC FDBXLRC,DCTSDSRL LRECL @SC90264 05955500
- MVC FDBXBLK,DCTSDSBL BLKSI @SC90264 05956000
- CLC FABCOMM(5),=CL8'OPEN I' @SC90264 05956500
- BNE DSKLKDA Not going to open it @SC90264 05957000
- OI FDBFLGS,SVATT Must observe predefined attrs @SC91150 05957500
- LA 9,C'O' @SC90264 05958000
- TM DCTSDSTF,DCTSDSOP Output? @SC90264 05958500
- BO *+8 Yes @SC90264 05959000
- LA 9,C'I' No, input @SC90264 05959500
- CLM 9,1,FABCOMM+5 Does it match data set? @SC90264 05960000
- BNE DSKER1 No, we're in trouble @SC90264 05960500
- DSKLKDA TM DCTSDSTF,DCTSDSOP Output? @SC90264 05961000
- BO DSKLKFND Yes, can just say "found" @SC90264 05961500
- BAL 9,DSKTDOPE @SC90264 05962000
- B DSKLKNF Failed, say it's not there @SC90264 05962500
- EXEC CICS READQ TD QUEUE(FABFNAM) SET(1), @SC90264+05963000
- LENGTH(FABNORD) NOHANDLE, @SC90264 05963500
- BAL 14,DSKCHKER Test success @SC90264 05964000
- BR 2 Return indication @SC90264 05964500
- * Handle internal file @SC90264 05965000
- DSKLKTK KCALL KFLLKP,(3) @SC90264 05965500
- ST 1,DSKSECPL Ptr to KFS block @SC90264 05966000
- LTR 15,15 @SC90264 05966500
- BR 2 @SC90264 05967000
- * Handle pipe (also called by other disk operations) @SC90264 05967500
- DSKLKPG LA 8,FABFNAM Point to pgm in FAB @SC90264 05968000
- TM FABFLGS,FABFPGM General pipe? @SC90264 05968500
- BO *+8 Yes, use that @SC90264 05969000
- LA 8,=CL8'IKXDYNAL' @SC90264 05969500
- ICM 9,15,=A(KHOST) @SC90264 05970000
- BZ DSKLKPGX @SC90264 05970500
- LR 14,8 @SC90264 05971000
- LR 15,3 String address @SC90264 05971500
- LA 0,DSKFABLN Ptr to length @SC90264 05972000
- STM 14,0,DSKSECPL Set up calling sequence @SC90264 05972500
- KCALL (9),DSKSECPL,EXT,E=0(,2) @SC90264 05973000
- DSKLKPGX CLC =CL8'IKXDYNAL',0(8) @SC90264 05973500
- BNE DSKLKPGZ General pipe @SC90264 05974000
- TM DSKFL,PLOAD Pgm loaded? @SC90264 05974500
- BO DSKLKPGZ Yes, we're all set @SC90264 05975000
- OI DSKFL,PLOAD Mark pgm loaded @SC90264 05975500
- DSKLKPGY EXEC CICS LOAD PROGRAM(0(,8)) NOHANDLE, @SC90264 05976000
- DSKLKPGZ EXEC CICS LINK PROGRAM(0(,8)) COMMAREA(0(,3)), @SC90264+05976500
- LENGTH(DSKFABLN+2) NOHANDLE, @SC90264 05977000
- L 15,DFHEIBP Set up to copy EIB code @SC90264 05977500
- USING DFHEIBLK,15 @SC90264 05978000
- CLC F0,EIBRCODE Did the LINK work? @SC90264 05978500
- BE *+10 Yes @SC90264 05979000
- MVC FABRESP,EIBRCODE No, save error code @SC90264 05979500
- DROP 15 @SC90264 05980000
- CLC F0,FABRESP Did the operation work? @SC90264 05980500
- BR 2 @SC90264 05981000
- * 05981500
- * Set up search through list of files, pattern at (R1) 05982000
- DSKNSET DS 0H @SC89073 05982500
- MVC NXDEST,0(1) @SC90264 05983000
- TM 0(1),FABFTS+FABFTD TS and TD are in memory @SC90264 05983500
- BNZ DSKNSX Go scan list @SC90264 05984000
- TM 0(1),FABFTAK @SC90264 05984500
- BZ DSKNSWLD Not one of the types in memory @SC90264 05985000
- CLC CURFUID,1(1) TAKE in memory only if current @SC90264 05985500
- BE DSKNSX Yes, go scan list @SC90264 05986000
- DSKNSWLD DS 0H @SC90264 05986500
- MVI TRTBL+C'%',1 Want to catch a percent @SC86115 05987000
- MVI TRTBL+C'*',1 Want to catch an asterisk @SC86115 05987500
- TRT LFUID+1(LFFNM,1),TRTBL See if anything wild @SC90264 05988000
- MVI TRTBL+C'%',0 Restore TRTBL @SC86115 05988500
- MVI TRTBL+C'*',0 @SC86115 05989000
- BZ DSKNSX No wild chars found, ok @SC90264 05989500
- CLI 0(1),C' ' Did we just run off the end? @SC90264 05990000
- BNE RTRN1 Wild char. Can't handle for TS @SC90264 05990500
- * 05991000
- * Flush previous file pattern 05991500
- DSKNSX MVC NXPTR,=X'80000000' @SC90264 05992000
- L 9,NXPTR2 @SC91150 05992500
- DSKNSX1 LTR 9,9 @SC91150 05993000
- BZ RTRN0 No more blocks @SC91150 05993500
- L 9,TSUTFC-DFHTSUT(,9) @SC91150 05994000
- L 6,NXPTR2 Free old fake block @SC91150 05994500
- EXEC CICS FREEMAIN DATA(0(,6)), @SC91150 05995000
- ST 9,NXPTR2 Reset ptr to current block @SC91150 05995500
- B DSKNSX1 @SC91150 05996000
- * 05996500
- * Check CWD string, return code in R15 05997000
- DSKCWDF DS 0H @SC89073 05997500
- LA 3,DSKSTT @SC90264 05998000
- MVC FABFID,0(1) Copy as much as possible of string@SC90264 05998500
- MVC FABCOMM,=CL8'CWD' @SC90264 05999000
- BAL 2,DSKVALID Check if allowed @SC90264 05999500
- CLI FABFID+2,C'''' DSN? @SC90264 06000000
- BE RTRN0 Yes, it can be anything @SC90264 06000500
- LA 0,LFUID No, must be userid @SC90264 06001000
- CLM 0,3,FABFID Is it the right length? @SC90264 06001500
- BL RTRN1 Too long, reject it @SC90264 06002000
- B RTRN0 Ok @SC90264 06002500
- * 06003000
- * Check disk space for proposed file: FDB at (R1), FAB ptr at (R6) 06003500
- DSKTSP L 5,FDBSIZE-FDBD(,1) Get actual size @SC90037 06004000
- ICM 3,15,0(6) Get FAB ptr @SC90037 06004500
- BZ DSKTSPX Not open yet @SC90037 06005000
- DSKTSP0 DS 0H @SC90037 06005500
- TM FABFLGS,FABFTAK Internal file? @SC90264 06006000
- BZ RTRN0 No, can't say how much room @SC90264 06006500
- CLC FABFUID,CURFUID Current directory? @SC90264 06007000
- BNE RTRN0 No, don't know about them @SC90264 06007500
- CLC FABFUID,SYSUID Global directory? @SC90264 06008000
- BE RTRN0 Yes, don't limit that @SC90264 06008500
- L 1,LIMKFS Total allowed @SC90264 06009000
- SL 1,USRTOTL Amount already used @SC90264 06009500
- SRL 1,10 Convert to Kbytes @SC86316 06010000
- CLR 1,5 @SC90037 06010500
- BL RTRN1 No room @SC86316 06011000
- B RTRN0 Ok @SC86316 06011500
- DSKTSPX MVC DSKSTNM,0(2) File not opened yet, look for it @SC90037 06012000
- LA 3,DSKSTT Point to temporary FAB @SC90037 06012500
- MVC FABCOMM,=CL8'TEST' @SC90264 06013000
- BAL 2,DSKLKP @SC90037 06013500
- BNZ DSKTSP0 Not found, nothing to erase @SC90037 06014000
- MVC FDBSIZE,F0 Clear out old size, if any @SC90264 06014500
- BAL 14,DSKVALS Compute size, if possible @SC90264 06015000
- L 1,FDBSIZE Fetch it @SC90264 06015500
- SR 5,1 Assume old file will be erased @SC90037 06016000
- BNP RTRN0 Will release enough for new file @SC90037 06016500
- B DSKTSP0 Not enough, check free blocks @SC90037 06017000
- * 06017500
- DSKNXT DS 0H @SC89073 06018000
- XC DSKFDB,DSKFDB Clear out info @SC90264 06018500
- MVC FILNAM,NXDEST Set up full fid @SC90264 06019000
- LA 1,NXDEST Ptr to pattern with flags @SC90264 06019500
- ST 1,DSKSECPL+4 Set up call to KHIDE @SC90264 06020000
- L 9,NXPTR2 For TS chains @SC90264 06020500
- ICM 1,15,NXPTR Current ptr @SC90264 06021000
- BP NXFNEXT Already started, get next @SC90264 06021500
- BZ RTRN1 Nothing else there @SC90264 06022000
- MVI NXPTR,0 Clear to 0, in case "other" @SC90264 06022500
- NI DSKFL,255-WFN Nothing wild yet @SC90264 06023000
- L 1,CSAPTR Access CSA @SC90264 06023500
- * Set up for scan of specific kind of file... @SC90264 06024000
- TM NXDEST,FABFTS Is it a TS? @SC90264 06024500
- BZ DSKNXTTD @SC90264 06025000
- USING DFHTSUT,2 @SC91150 06025500
- L 2,CSATSMTA-DFHCSABA(,1) Start of TS chain @SC91150 06026000
- LA 9,NXPTR2+DFHTSUT-TSUTFC Start of fake chain @SC91150 06026500
- DSKNXTS0 LH 6,TSUTCC @SC91150 06027000
- LTR 6,6 Any entries in this block? @SC91150 06027500
- BZ DSKNXTS9 No @SC91150 06028000
- LA 1,TSUTELN Length of each entry @SC91150 06028500
- MR 0,6 Compute size needed @SC91150 06029000
- LA 1,TSUTEBA-DFHTSUT(,1) (including control offset@SC91150 06029500
- ST 1,GTMLEN @SC91150 06030000
- EXEC CICS GETMAIN FLENGTH(GTMLEN) SET(1), Get block @SC91150 06030500
- L 7,TSUTAHI Start of real list @SC91150 06031000
- DROP 2 @SC91150 06031500
- USING DFHTSUT,9 @SC91150 06032000
- ST 1,TSUTFC Add fake block to fake chain @SC91150 06032500
- LR 9,1 Now address new block @SC91150 06033000
- XC TSUTFC,TSUTFC Clear next forward ptr @SC91150 06033500
- LA 1,TSUTEBA @SC91150 06034000
- ST 1,TSUTAHI Start of fake list @SC91150 06034500
- STH 6,TSUTCC Set number of entries @SC91150 06035000
- DSKNXTS1 MVC 0(TSUTELN,1),0(7) Copy one entry from real list@SC91150 06035500
- ST 1,TSUTALI Save as if last @SC91150 06036000
- LA 1,TSUTELN(,1) @SC91150 06036500
- LA 7,TSUTELN(,7) @SC91150 06037000
- BCT 6,DSKNXTS1 Keep copying until done @SC91150 06037500
- DROP 9 @SC91150 06038000
- USING DFHTSUT,2 @SC91150 06038500
- DSKNXTS9 L 2,TSUTFC See if another block @SC91150 06039000
- LTR 2,2 @SC91150 06039500
- BNZ DSKNXTS0 Yes, copy it as well @SC91150 06040000
- DROP 2 @SC91150 06040500
- LA 7,8-1 Length of TS name @SC90264 06041000
- * MVC NXPTR2,CSATSMTA-DFHCSABA(1) Temp storage table@SC91150 06041500
- B DSKNXT1 @SC90264 06042000
- DSKNXTTD TM NXDEST,FABFTD Is it a TD? @SC90264 06042500
- BZ DSKNXTTT Other @SC90264 06043000
- LA 7,4-1 @SC90264 06043500
- MVC NXPTR,CSADCTBA-DFHCSABA(1) Start of DCT table @SC90264 06044000
- B DSKNXT1 @SC90264 06044500
- DSKNXTTT TM NXDEST,FABFTAK Is it internal? @SC90264 06045000
- BZ DSKNXTTO Other @SC90264 06045500
- CLC CURFUID,NXDEST+1 TAKE in memory only if current @SC90264 06046000
- BNE DSKNXTTO Not current, must look up @SC90264 06046500
- LA 7,8-1 @SC91150 06047000
- MVC NXPTR,PTRKFS Start of internal chain @SC90264 06047500
- * Setup for scan: R7=length-1 of name field, NXPTR initialized @SC90264 06048000
- DSKNXT1 LA 6,NXDNAM Start of name per se @SC90264 06048500
- LA 1,1(7,6) End of field @SC90264 06049000
- EX 7,NXFWTR Find first blank @SC90264 06049500
- SR 1,6 Compute length @SC86295 06050000
- ST 1,NXFFNL Length of pattern @SC90264 06050500
- MVI TRTBL+C' ',0 Don't want to catch a blank @SC86115 06051000
- MVI TRTBL+C'%',1 Want to catch a percent @SC86115 06051500
- MVI TRTBL+C'*',1 Want to catch an asterisk @SC86115 06052000
- EX 7,NXFWTR See if any % or * in name @SC90264 06052500
- MVI TRTBL+C'%',0 Restore TRTBL @SC86115 06053000
- MVI TRTBL+C'*',0 @SC86115 06053500
- MVI TRTBL+C' ',1 @SC86115 06054000
- BZ *+8 No wild chars found @SC86295 06054500
- OI DSKFL,WFN @SC86295 06055000
- L 1,NXPTR @SC90264 06055500
- L 9,NXPTR2 For TS chains @SC90264 06056000
- NXFNEXT TM NXDEST,FABFTS Is it a TS? @SC90264 06056500
- BO NXFNXTS Yes, follow chains @SC90264 06057000
- TM NXDEST,FABFTAK Is it internal? @SC90264 06057500
- BO NXFNXTT Yes, follow chains @SC90264 06058000
- * Advance to next TD block and setup R6,R7 @SC90264 06058500
- LR DCTCBAR,1 Point to next item @SC90264 06059000
- CLI TDDCTDID,255 Reached end? @SC90264 06059500
- BE RTRN1 Yes, quit @SC90264 06060000
- ST 1,DSKSECPL Ptr to DCT @SC90264 06060500
- AH 1,TDDCTELN No match, keep at it @NL90264 06061000
- LA 6,TDDCTDID Start of field @SC90264 06061500
- LA 7,4-1 Length of field @SC90264 06062000
- B NXFCHK Now compare names @SC90264 06062500
- * Advance to next internal file and setup R6,R7 @SC90264 06063000
- USING KFSBLK,9 @SC90264 06063500
- NXFNXTT LTR 9,1 Reached end? @SC90264 06064000
- BZ RTRN1 Yes, quit @SC90264 06064500
- ST 1,DSKSECPL Ptr to KFS block @SC90264 06065000
- L 1,KFSNEXT Ptr to next one @NL90264 06065500
- LA 6,KFSFNAM Start of field @SC90264 06066000
- LA 7,8-1 Length of field @SC90264 06066500
- NXFCHK ST 1,NXPTR Save the ptr for the next @SC90264 06067000
- STM 6,7,DSKCURN Save ptr,len-1 of current name @SC90264 06067500
- TM DSKFL,WFN @SC86295 06068000
- BO NXFWF Go if wild @SC86295 06068500
- CLC 0(,6),NXDNAM @SC90264 06069000
- EX 7,*-6 Compare name @SC90264 06069500
- BNE NXFNEXT Keep trying @SC90264 06070000
- NXFHAVE LA 14,FILNAM+LFUID+1 @SC90264 06070500
- LA 15,LFFNM Length of name part @SC90264 06071000
- LM 6,7,DSKCURN Get ptr,len-1 @SC90264 06071500
- LA 7,1(,7) Convert to length @SC90264 06072000
- ICM 7,8,BLANK @SC90264 06072500
- MVCL 14,6 Copy to FILNAM with blank padding @SC90264 06073000
- MVC DSKSTNM,FILNAM @SC90264 06073500
- LA 3,DSKSTT @SC86295 06074000
- TM FABFLGS,FABFTD TD queue? @SC91150 06074500
- BZ NXFHVAL No, we're fine @SC91150 06075000
- TM TDDCTDT,TDEXTRBM EXTRA? @SC91150 06075500
- BZ NXFHVAL No, we're fine @SC91150 06076000
- L 15,TDDCTSDS Ptr to SDSCI @SC91150 06076500
- USING DCTSDSCI,15 @SC91150 06077000
- MVC FDBXRCF,DCTSDSRF RECFM from extra TD @SC91150 06077500
- MVC FDBXLRC,DCTSDSRL LRECL @SC91150 06078000
- MVC FDBXBLK,DCTSDSBL BLKSI @SC91150 06078500
- DROP 15 @SC91150 06079000
- NXFHVAL DS 0H @SC91150 06079500
- BAL 14,DSKVALS Copy out quantities @SC86295 06080000
- B RTRN0 @SC86295 06080500
- DSKNXTTO MVC DSKSTNM,FILNAM Other types: just do one @SC90264 06081000
- LA 3,DSKSTT @SC86295 06081500
- MVC FABCOMM,=CL8'TEST' @SC90264 06082000
- BAL 2,DSKLKP Can't scan blocks, must look up @SC90264 06082500
- BNZ RTRN1 File not found @SC90264 06083000
- BAL 14,DSKVALS Copy out quantities @SC86295 06083500
- B RTRN0 @SC86295 06084000
- * Advance to next TS block and setup R6,R7 @SC90264 06084500
- USING DFHTSUT,9 @SC90264 06085000
- USING DFHTSUTE,1 @SC90264 06085500
- NXFNXTS LTR 1,1 @SC90264 06086000
- BNP NXFNXTSL @SC90264 06086500
- C 1,TSUTALI Any more on chain? @SC90264 06087000
- BNL NXFNXTSN @SC90264 06087500
- LA 1,TSUTELN(,1) Check next entry @SC90264 06088000
- NXFNXTS1 TM TSUTETC,TSUTEGID Is group id bit on? @ML90264 06088500
- BZ NXFNXTS No, skip this one @SC90264 06089000
- LA 6,TSUTEID @SC90264 06089500
- LA 7,8-1 @SC90264 06090000
- ST 1,DSKSECPL Ptr to TSUTE @SC90264 06090500
- B NXFCHK @SC90264 06091000
- NXFNXTSN L 9,TSUTFC @SC90264 06091500
- L 6,NXPTR2 Free old fake block @SC91150 06092000
- EXEC CICS FREEMAIN DATA(0(,6)), @SC91150 06092500
- ST 9,NXPTR2 @SC90264 06093000
- NXFNXTSL MVC NXPTR,F0 @SC90264 06093500
- LTR 9,9 @SC90264 06094000
- BZ RTRN1 Not found @SC90264 06094500
- CLC TSUTCC,F0 Test for no entries @SC90264 06095000
- BE NXFNXTSN @SC90264 06095500
- L 1,TSUTAHI First on chain @SC90264 06096000
- B NXFNXTS1 @SC90264 06096500
- DROP 1,9 @SC90264 06097000
- * 06097500
- NXFWTR TRT 0(,6),TRTBL Look for first blank @SC90264 06098000
- NXFWF ICM 15,15,=A(KHIDE) Check for secret names? @SC90264 06098500
- BZ NXFWF2 Not needed @SC90264 06099000
- KCALL (15),DSKSECPL,EXT See if it's allowed @SC90264 06099500
- L 1,NXPTR Restore R1 @SC90264 06100000
- BNZ NXFNEXT Skip it if not @SC90264 06100500
- NXFWF2 LA 1,1(7,6) End of field @SC90264 06101000
- EX 7,NXFWTR Find first blank @SC90264 06101500
- SR 1,6 Compute length @SC86295 06102000
- LR 7,1 Save length @SC86295 06102500
- LA 14,NXDNAM Start of name per se @SC90264 06103000
- L 15,NXFFNL Length of pattern @SC90264 06103500
- L 1,NXPTR Restore ptr to next block @SC90264 06104000
- * 06104500
- * Enter here: R14,R15 contain the pattern address and length @SC90264 06105000
- * and R6,R7 the source address and length @SC90264 06105500
- * No other registers are used @SC90264 06106000
- NI DSKFL,255-WARB Haven't seen any of these @SC86295 06106500
- ICM 7,8,=C'*' Use * as the fill char 06107000
- WLDLOOP CLCL 14,6 Compare them @SC90264 06107500
- BE NXFHAVE They're equal, fine @SC86295 06108000
- * 06108500
- * String mismatch - so examine offending pattern character. If not 06109000
- * % or * and we haven't seen any * yet, we fail. If it's % we just 06109500
- * skip it; if it's * we skip it and remember we've seen it. Else 06110000
- * back up to one past the last * and try again. 06110500
- CLI 0(14),C'%' @SC90264 06111000
- BE WLDLEN1 Go if % = LEN(1) pattern 06111500
- CLI 0(14),C'*' @SC90264 06112000
- BE WLDARB Go if * = ARB pattern 06112500
- TM DSKFL,WARB @SC86295 06113000
- BZ NXFNEXT Go if ARB already seen @SC86295 06113500
- CLM 7,7,F0 More data to compare? 06114000
- BE NXFNEXT Go if exhausted @SC86295 06114500
- LM 14,15,WLDPAT Restore addr of old ARB char @SC90264 06115000
- LM 6,7,WLDSRC Restore source addr too @SC90264 06115500
- LA 6,1(,6) Push one past @SC90264 06116000
- BCTR 7,0 Decrement length 06116500
- STM 6,7,WLDSRC Store changed addr 06117000
- B WLDLOOP And go compare again. 06117500
- * 06118000
- WLDLEN1 LA 14,1(,14) Increment pattern addr @SC90264 06118500
- BCTR 15,0 Decrement pattern len @SC90264 06119000
- CLM 7,7,F0 Length to compare more @SC86119 06119500
- BE NXFNEXT None, pattern '%' is extra @SC86119 06120000
- LA 6,1(,6) Increment source addr @SC90264 06120500
- BCTR 7,0 Decrement source len 06121000
- CLM 7,7,F0 Length to compare more @SC86119 06121500
- BNE WLDLOOP Go if more data 06122000
- LTR 15,15 Anything more in pattern? @SC90264 06122500
- BZ NXFHAVE No, it's a match @SC86295 06123000
- CLI 0(14),C'*' @SC90264 06123500
- BE WLDLOOP Go if ARB 06124000
- B NXFNEXT Failed @SC86295 06124500
- * 06125000
- * If pattern ends in ARB, then it will match anything. So return to 06125500
- * caller if the pattern is exhausted. 06126000
- WLDARB OI DSKFL,WARB Remember we saw one @SC86295 06126500
- LA 14,1(,14) Pass the ARB @SC90264 06127000
- BCTR 15,0 Decrement its length @SC90264 06127500
- LTR 15,15 Any more left? @SC90264 06128000
- BZ NXFHAVE No, it's a match @SC86295 06128500
- STM 14,15,WLDPAT Save pattern ptrs @SC90264 06129000
- STM 6,7,WLDSRC Save source ptrs @SC90264 06129500
- B WLDLOOP 06130000
- * 06130500
- * Fill in FDB from DCT or TSUTE or KFSBLK (ptr in DSKSECPL) @SC90264 06131000
- * Clobbers 0,1,2,6,7,8,15. Returns via 14. (note DCTCBAR=8) @SC90264 06131500
- DSKVALS LA 0,FDBD Ptr to FDB @SC86295 06132000
- RETREG (1,0) Return (0) as R1 to caller @SC89218 06132500
- MVI FDBRCF,C'V' Usually V @SC90264 06133000
- L 1,FDBBSIZ Use max length by default @SC90264 06133500
- TM FABFLGS,FABFTS @SC90264 06134000
- BZ DSKVLTT Not temp stor @SC90264 06134500
- L 15,DSKSECPL Ptr to TSUTE @SC90264 06135000
- USING DFHTSUTE,15 @SC90264 06135500
- MVC TMPDW+7(1),TSUTETC Save flags @SC90264 06136000
- L 15,TSUTEPTR Ptr to TSGID @SC90264 06136500
- USING DFHTSGID,15 @SC90264 06137000
- MVC FDBNREC,TSGIDTR Grab record count @SC90264 06137500
- TM TMPDW+7,TSUTEASI+TSUTEVSI @SC90264 06138000
- BZ DSKVLR Neither main nor aux? @SC90264 06138500
- SR 0,0 @SC90264 06139000
- ST 0,TMPDW @SC90264 06139500
- SR 6,6 Clear tentative LRECL @SC91150 06140000
- DSKVLSLP LH 2,KTSGIDNE Number of entries/block @SC91150 06140500
- LA 7,TSGIDEBA Start of record ptrs @SC90264 06141000
- DSKVLSLQ MVC TMPDW+3(1),3(7) Copy segment count @SC90264 06141500
- TM TMPDW+7,TSUTEASI AUX? @SC90264 06142000
- BO DSKVLSA Yes, use segment count @SC90264 06142500
- TM 0(7),X'7F' No. Above the 16M line? @SC91150 06143000
- BNZ DSKVLR Yes, can't calculate @SC91150 06143500
- ICM 8,7,1(7) Ok, get ptr to record block @SC91150 06144000
- BZ DSKVLSB No more ptrs, just round off @SC91150 06144500
- MVC TMPDW+2(2),20(8) Grab length of record @SC91150 06145000
- DSKVLSA A 0,TMPDW Accumulate total in R0 @SC90264 06145500
- C 6,TMPDW Get maximum record size @SC91150 06146000
- BNL *+8 @SC91150 06146500
- L 6,TMPDW New maximum @SC91150 06147000
- LA 7,4(,7) @SC90264 06147500
- BCT 2,DSKVLSLQ @SC90264 06148000
- ICM 15,15,TSGIDFC Next group of records @SC90264 06148500
- BNZ DSKVLSLP @SC90264 06149000
- TM TMPDW+7,TSUTEASI AUX? @SC90264 06149500
- BZ DSKVLSB No, use byte count as is @SC90264 06150000
- IC 15,KTSBPSEG Log(seg size) @SC91150 06150500
- SLL 0,0(15) Convert segments to bytes @SC90264 06151000
- SLL 6,0(15) Ditto for max record length @SC91150 06151500
- DSKVLSB AL 0,=F'512' Round up @SC90264 06152000
- SRL 0,10 Convert to Kbytes @SC90264 06152500
- ST 0,FDBSIZE @SC90264 06153000
- LR 1,6 Use observed max length for LRECL @SC91150 06153500
- B DSKVLR @SC90264 06154000
- DSKVLTT TM FABFLGS,FABFTAK @SC90264 06154500
- BZ DSKVLTD Not internal file @SC90264 06155000
- L 15,DSKSECPL Ptr to KFSBLK @SC90264 06155500
- USING KFSBLK,15 @SC90264 06156000
- LH 1,KFSLRC Use actual LRECL @SC90264 06156500
- MVC FDBNREC,KFSNREC Grab record count @SC90264 06157000
- MVC FDBDATE,KFSDATE Copy date/time @SC90264 06157500
- L 0,KFSSIZE Get file size in bytes @SC90264 06158000
- AL 0,=F'512' Round up @SC90264 06158500
- SRL 0,10 Convert to Kbytes @SC90264 06159000
- ST 0,FDBSIZE Copy to FDB @SC90264 06159500
- B DSKVLR @SC90264 06160000
- DROP 15 @SC91150 06160500
- DSKVLTD DS 0H @SC90264 06161000
- TM FABFLGS,FABFSPL @SC90264 06161500
- BO DSKVLTX2 Spool file, use FDBX info @SC90264 06162000
- TM FABFLGS,FABFTD @SC90264 06162500
- BZ DSKVLR Other @SC90264 06163000
- L DCTCBAR,DSKSECPL Ptr to info @SC90264 06163500
- MVC FDBFL2,TDDCTDT Copy flags @SC90264 06164000
- XC FDBSIZE,FDBSIZE Clear size (unknown) @SC90264 06164500
- TM FDBFL2,TDINDTBM Intra? @SC90264 06165000
- BZ DSKVLTX No, see if Extra @SC90264 06165500
- MVC FDBNREC,TDDCTTQC+2 Yes, grab record count @SC91150 06166000
- B DSKVLR Ok, we're done @SC90264 06166500
- DSKVLTX DS 0H @SC90264 06167000
- TM FDBFL2,TDEXTRBM Extra? @SC90264 06167500
- BNO DSKVLR No @SC90264 06168000
- DSKVLTX2 MVI FDBRCF,C'U' @SC86299 06168500
- LH 1,FDBXBLK Use BLKSI if U @SC90264 06169000
- TM FDBXRCF,X'C0' @SC90264 06169500
- BO DSKVLR @SC86299 06170000
- LH 1,FDBXLRC Use LRECL if F or V @SC90264 06170500
- LTR 1,1 Make sure it's defined @SC91150 06171000
- BP *+8 Yes, ok @SC91150 06171500
- LH 1,FDBLRC No, keep old LRECL @SC91150 06172000
- MVI FDBRCF,C'F' @SC86299 06172500
- TM FDBXRCF,X'80' @SC90264 06173000
- BO DSKVLR @SC86299 06173500
- MVI FDBRCF,C'V' @SC86299 06174000
- DSKVLR STH 1,FDBLRC @SC86299 06174500
- L 7,4(13) Get previous stack frame @SC88048 06175000
- L 1,4(7) and the one before @SC88076 06175500
- CLC =A(SERVER),16(1) Was the caller SERVER? @SC89215 06176000
- BE *+12 Yes, ok @SC88076 06176500
- CLC =A(USNTRF),16(1) No, was it USNTRF? @SC89215 06177000
- BNER 14 No, don't bother checking TAKE's @SC88076 06177500
- USING SERVERSV,7 Assume SERVER or USNTRF @SC88048 06178000
- ICM 0,15,TAKLEV Any TAKE files open? @SC88048 06178500
- BNPR 14 No, that's fine @SC88048 06179000
- CH 0,=Y(TAKMAX) Be sure this is valid @SC88048 06179500
- BNLR 14 Oops, give up @SC88048 06180000
- DSKVACT LR 6,0 @SC88048 06180500
- SLA 6,2 @SC88048 06181000
- L 6,TAKTAB-4(6) Fetch a file ticket @SC88048 06181500
- CLC FABFID,FABFID-FABD(6) Does the name match? @SC88048 06182000
- BE DSKVACS Yes, this file is in use @SC88048 06182500
- BCT 0,DSKVACT No, keep looking @SC88048 06183000
- BR 14 No match, that's ok @SC88048 06183500
- DSKVACS OI FDBFLGS,FDBACTV Yes, turn on flag @SC88048 06184000
- BR 14 @SC86295 06184500
- DROP 7 @SC91150 06185000
- * 06185500
- DROP 3,5,DCTCBAR @SC91150 06186000
- * 06186500
- DSKFABLN DC A(FABDWDS*8) Length of FAB @SC90264 06187000
- LOCALS , @SC86295 06187500
- DSKEMTS DS 0CL15'SET Q( ) CLO' @ML90264 06188000
- WLDPAT DS A Place in pattern of last ARB 06188500
- DS F Length of pattern past ARB 06189000
- WLDSRC DS A Place in source when ARB seen 06189500
- DS F Length of source past WLDSRC 06190000
- DSKCPPTR DS 0A Ticket for COPY output @SC90264 06190500
- NUMPAT DS CL8 Work area for sequence numbers @SC90264 06191000
- DSKSECPL DS 3A Plist for KHIDE or KHOST @SC90264 06191500
- DSKCURN DS 2F Saved ptrs during DIR scan @SC90264 06192000
- DSKCOD DS X Saved DISKIO function code @SC90264 06192500
- * 06193000
- EXIT 06193500
- TITLE 'KFILIO Routine - performs disk I/O functions' @SC90264 06194000
- * ERRNUM unchanged unless there is a disk error. @SC90264 06194500
- * Function selected on entry by FABCOMM (pointed to by R1) @SC90264 06195000
- KFILIO ENTER , @SC90264 06195500
- USING FABD,3 @SC90264 06196000
- USING KFSBLK,4 @SC90264 06196500
- USING DFHEIBLK,8 @SC90264 06197000
- L 8,DFHEIBP Get addressability @SC90264 06197500
- LR 3,1 @SC90264 06198000
- XC FABRESP,FABRESP Clear error code @SC90264 06198500
- LH 1,FABRN Convert rec no for key @SC90264 06199000
- CVD 1,KFLDW @SC90264 06199500
- OI KFLDW+7,15 @SC90264 06200000
- UNPK KFLRN,KFLDW @SC90264 06200500
- MVC KFLFUID(LFUID+LFFNM),FABFUID Copy name for key @SC90264 06201000
- LM 6,7,FDBBUFF Adr and len of buffer @SC90264 06201500
- STH 7,FABNORD Set up for read/write @SC90264 06202000
- L 4,FABUWORD Ptr to KFSBLK @SC90264 06202500
- * Read a record @SC90264 06203000
- CLC =C'READ',FABCOMM @SC90264 06203500
- BNE KFLWRT @SC90264 06204000
- EXEC CICS READ DATASET(KFILE) RIDFLD(KFLFUID), @SC90264+06204500
- INTO(0(,6)) LENGTH(FABNORD) NOHANDLE, @SC90264 06205000
- CLC F0,EIBRCODE Any error? @SC90264 06205500
- BNE KFLRDX Yes, note it @SC90264 06206000
- LA 1,LFKEY Length of key @SC90264 06206500
- LH 7,FABNORD Actual read length @SC90264 06207000
- SR 7,1 Deduct @SC90264 06207500
- STH 7,FABNORD Data length @SC90264 06208000
- LA 0,0(1,6) Start of real data @SC90264 06208500
- LR 1,7 @SC90264 06209000
- MVCL 6,0 Move everything back @SC90264 06209500
- B RTRN0 @SC90264 06210000
- KFLRDX MVC FABRESP,EIBRCODE @SC90264 06210500
- B RTRN1 @SC90264 06211000
- * Write a record @SC90264 06211500
- KFLWRT CLC =C'WRITE',FABCOMM @SC90264 06212000
- BNE KFLDEL @SC90264 06212500
- LR 0,7 Length of record @SC90264 06213000
- AL 0,KFSSIZE Accumulate file size @SC90264 06213500
- BC 12,*+8 @SC90264 06214000
- SR 0,0 @SC90264 06214500
- BCTR 0,0 Set to max if carry @SC90264 06215000
- ST 0,KFSSIZE New size @SC90264 06215500
- CH 7,KFSLRC Check for max lrecl @SC90264 06216000
- BNH *+8 @SC90264 06216500
- STH 7,KFSLRC New max lrecl @SC90264 06217000
- *------------------------- Quota checking ------------ @SC90264 06217500
- CLC FABFUID,CURFUID Current userid? @SC90264 06218000
- BNE KFLWRT1 No, assume it's ok @SC90264 06218500
- CLC FABFUID,SYSUID Global directory? @SC90264 06219000
- BE KFLWRT1 Yes, never limit that @SC90264 06219500
- AL 0,USRTOTL Get new total assuming success @SC90264 06220000
- BC 3,KFLWRX Way too big @SC90264 06220500
- CL 0,CUTKFS See if over cutoff limit @SC90264 06221000
- BC 3,KFLWRX Yes, too big @SC90264 06221500
- *------------------------- @SC90264 06222000
- KFLWRT1 LA 1,LFKEY Length of key @SC90264 06222500
- AR 7,1 @SC90264 06223000
- STH 7,FABNORD Increase length @SC90264 06223500
- SR 6,1 And back up start of buffer @SC90264 06224000
- MVC 0(LFKEY,6),KFLFUID Copy key into data buffer @SC90264 06224500
- KFLWRT2 EXEC CICS WRITE DATASET(KFILE) RIDFLD(KFLFUID), @SC90264+06225000
- FROM(0(,6)) LENGTH(FABNORD) NOHANDLE, @SC90264 06225500
- CLC F0,EIBRCODE Any error? @SC90264 06226000
- BE RTRN0 @SC90264 06226500
- MVC FABRESP,EIBRCODE @SC90264 06227000
- B RTRN1 @SC90264 06227500
- * 06228000
- KFLWRX MVI FABRESP,X'83' Say it was NOSPACE @SC90264 06228500
- B RTRN1 @SC90264 06229000
- * Delete a file @SC90264 06229500
- KFLDEL CLC =C'DELETE',FABCOMM @SC90264 06230000
- BNE KFLCLO @SC90264 06230500
- MVC FABUWORD,F0 Will no longer have KFSBLK @SC90264 06231000
- ICM 4,15,TMPBLK Check saved temporary @SC91150 06231500
- BZ KFLDEL0 None set @SC91150 06232000
- CLC FABFUID(LFUID+LFFNM),KFSFUID Are we killing it? @SC91150 06232500
- BNE KFLDEL0 No, fine @SC91150 06233000
- MVI KFSFUID,0 Yes, disable that block @SC91150 06233500
- KFLDEL0 DS 0H @SC91150 06234000
- CLC FABFUID,CURFUID Current directory? @SC90264 06234500
- BNE KFLDEL1 No, skip bookkeeping @SC90264 06235000
- KCALL KFLLKP,(3),E=RTRN1 Find KFS block @SC90264 06235500
- LR 4,1 Get ptr for addressability @SC90264 06236000
- MVC FABUWORD,F0 Will no longer have KFSBLK @SC91150 06236500
- L 0,USRTOTL Reduce storage total @SC90264 06237000
- SL 0,KFSSIZE By amount used in this file @SC90264 06237500
- BC 3,*+6 @SC91150 06238000
- SLR 0,0 @SC90264 06238500
- ST 0,USRTOTL @SC90264 06239000
- LM 6,7,KFSNEXT Load ptrs to next and previous @SC90264 06239500
- MVC KFSNEXT,PTRFRE Link to free chain @SC90264 06240000
- ST 4,PTRFRE @SC90264 06240500
- ST 6,KFSNEXT-KFSBLK(,7) Skip over forward ptrs @SC90264 06241000
- LTR 4,6 End of chain? @SC90264 06241500
- BZ *+8 Yes, just unlink this one @SC90264 06242000
- ST 7,KFSPREV No, reattach rest of chain @SC90264 06242500
- KFLDEL1 EXEC CICS DELETE DATASET(KFILE) RIDFLD(FABFUID), @SC90264+06243000
- KEYLENGTH(=Y(LFUID+LFFNM)) GENERIC NOHANDLE, @SC90264 06243500
- CLC F0,EIBRCODE Any error? @SC90264 06244000
- BE RTRN0 @SC90264 06244500
- B RTRN1 @SC90264 06245000
- * Close a file @SC90264 06245500
- KFLCLO CLC =C'CLOSE',FABCOMM @SC90264 06246000
- BNE KFLOPO @SC90264 06246500
- TM FABIOF,1 Output file? @SC90264 06247000
- BZ RTRN0 No, nothing to do @SC90264 06247500
- CLC FABFUID,CURFUID Current userid? @SC91150 06248000
- BNE KFLCLO1 No, continue @SC91150 06248500
- L 0,KFSSIZE Yes, accumulate size @SC91150 06249000
- AL 0,USRTOTL of current directory @SC91150 06249500
- ST 0,USRTOTL @SC91150 06250000
- KFLCLO1 DS 0H @SC91150 06250500
- EXEC CICS ASKTIME, @SC90264 06251000
- MVC KFSDATE+1(1),EIBDATE+1 Copy year @SC90264 06251500
- ZAP TMPDW,EIBDATE+2(2) @SC90264 06252000
- CVB 7,TMPDW Get day-of-year in binary @SC90264 06252500
- MVC KFLMNTH,=AL1(30,31,30,31,31,30,31,30,31,28,31) @SC86299 06253000
- TM EIBDATE+1,1 Check for leap year @SC90264 06253500
- BNZ KFLVNLP Not @SC90264 06254000
- TM EIBDATE+1,X'12' @SC90264 06254500
- BNM KFLVNLP Not @SC90264 06255000
- MVI KFLMNTH+9,29 Leap year, change Feb. @SC86299 06255500
- KFLVNLP LA 6,11 @SC86299 06256000
- SR 0,0 @SC86299 06256500
- KFLVMDL IC 0,KFLMNTH-1(6) @SC86299 06257000
- SR 7,0 Test if passed the right month @SC86299 06257500
- BNP KFLVMDM Got it @SC86299 06258000
- BCT 6,KFLVMDL @SC86299 06258500
- SR 0,0 Hit December @SC86299 06259000
- KFLVMDM AR 7,0 Get day of month @SC86299 06259500
- LCR 6,6 @SC86299 06260000
- LA 6,12(6) Get month @SC86299 06260500
- MH 6,=H'100' @SC86299 06261000
- AR 6,7 Combine MMDD @SC86299 06261500
- MH 6,=H'10' @SC86299 06262000
- CVD 6,TMPDW @SC86299 06262500
- MVC KFSDATE+2(2),TMPDW+5 @SC86299 06263000
- MVI KFSDATE,X'19' Assume 20th Cent @SC86295 06263500
- CLI KFSDATE+1,X'50' @SC86295 06264000
- BH *+8 Ok @SC86295 06264500
- MVI KFSDATE,X'20' Must be 21st @SC86295 06265000
- MVO TMPDW,EIBTIME Get time from 0hhmmss+ @SC91150 06265500
- MVC KFSDATE+4(3),TMPDW+4 Copy just hhmmss @SC91150 06266000
- MVC KFSNREC,FABRN Save number of records @SC90264 06266500
- MVC KFLRN,=5C'0' Clear for key @SC90264 06267000
- EXEC CICS DELETE DATASET(KFILE) RIDFLD(KFLFUID), @SC91150+06267500
- NOHANDLE, Remove previous directory block @SC91150 06268000
- UNPK KFLFDAT(15),KFSDAT(8) @SC90264 06268500
- UNPK KFLFDAT+14(15),KFSDAT+7(8) @SC90264 06269000
- UNPK KFLFDAT+28(3),KFSDAT+14(2) @SC90264 06269500
- * - - - - - - Extend these UNPK instrs if KFSLEN grows @SC90264 06270000
- TR KFLFDAT(2*KFSLEN),KFLHEXY-C'0' @SC90264 06270500
- LA 6,KFLFUID @SC90264 06271000
- MVC FABNORD,=Y(KFSLEN*2+LFKEY) @SC90264 06271500
- B KFLWRT2 Write new dir block out @SC90264 06272000
- * Open a file for output @SC90264 06272500
- KFLOPO CLC =C'OPEN O',FABCOMM @SC90264 06273000
- BNE KFLOPI @SC90264 06273500
- *------------------------- Quota checking ------------ @SC90264 06274000
- CLC FABFUID,CURFUID Current userid? @SC90264 06274500
- BNE KFLOPO1 No, assume it's ok @SC90264 06275000
- CLC FABFUID,SYSUID Global directory? @SC90264 06275500
- BE KFLOPO1 Yes, never limit that @SC90264 06276000
- CLC USRTOTL,LIMKFS See if over quota @SC90264 06276500
- BNL RTRN1 Yes, quit @SC90264 06277000
- *------------------------- @SC90264 06277500
- KFLOPO1 LTR 4,4 Does it exist? @SC90264 06278000
- BZ KFLOPO2 Not there, must create new block @SC90264 06278500
- MVC FABRN,KFSNREC If it's there, we append @SC90264 06279000
- L 0,USRTOTL @SC90264 06279500
- SL 0,KFSSIZE ... but don't count twice in total@SC90264 06280000
- ST 0,USRTOTL @SC90264 06280500
- B RTRN0 @SC90264 06281000
- KFLOPO2 L 4,TMPBLK Ptr to block if not current dir. @SC90264 06281500
- CLC FABFUID,CURFUID Current? @SC90264 06282000
- BNE KFLOPO3 No, just set it up @SC90264 06282500
- LA 4,PTRKFS Yes, start through chain @SC90264 06283000
- KFLOLP LR 6,4 Save ptr to this block @SC90264 06283500
- ICM 4,15,KFSNEXT Get ptr to next block @SC90264 06284000
- BZ KFLONEW Hit end, file not found @SC90264 06284500
- CLC FABFNAM,KFSFNAM Match? @SC90264 06285000
- BH KFLOLP No, keep looking @SC90264 06285500
- KFLONEW BAL 2,KFLCGB Prepare new block @SC90264 06286000
- MVC KFSNEXT,0(6) Link into chain: 6->previous @SC90264 06286500
- ST 4,KFSNEXT-KFSBLK(,6) @SC90264 06287000
- ST 6,KFSPREV Set backward ptr in new block @SC90264 06287500
- ICM 7,15,KFSNEXT Added to end? @SC90264 06288000
- BZ *+8 Yes, done linking @SC90264 06288500
- ST 4,KFSPREV-KFSBLK(,7) No, set back ptr in next @SC90264 06289000
- KFLOPO3 ST 4,FABUWORD Save ptr in FAB @SC90264 06289500
- MVC KFSFUID(LFUID+LFFNM),FABFUID @SC90264 06290000
- XC KFSDAT(KFSLEN),KFSDAT @SC90264 06290500
- B RTRN0 @SC90264 06291000
- * Open input file @SC90264 06291500
- KFLOPI B RTRN0 @SC90264 06292000
- * 06292500
- * Look up file given in FAB. 1->FAB. Set up TMPBLK if nec. @SC90264 06293000
- * Return 15=0 and 1->block if found, 15=1 otherwise. @SC90264 06293500
- * 06294000
- KFLLKP ENTER ALT @SC90264 06294500
- L 8,DFHEIBP Get addressability @SC90264 06295000
- LR 3,1 Address FAB @SC90264 06295500
- MVI FDBRCF,C'V' Enforce RECFM=V @SC91150 06296000
- CLC FABFUID,CURFUID File in current directory? @SC91150 06296500
- BNE KFLLOTH No, must get individual block @SC90264 06297000
- LA 4,PTRKFS Yes, start through chain @SC90264 06297500
- KFLLLP LR 6,4 Save ptr to this block @SC90264 06298000
- ICM 4,15,KFSNEXT Get ptr to next block @SC90264 06298500
- BZ RTRN1 Hit end, file not found @SC90264 06299000
- CLC FABFNAM,KFSFNAM Match? @SC90264 06299500
- BH KFLLLP No, keep looking @SC90264 06300000
- BL RTRN1 No, passed the right point @SC90264 06300500
- KFLLRET RETREG (1,4) Found file, return ptr to block @SC90264 06301000
- ST 4,FABUWORD Save ptr in FAB @SC90264 06301500
- B RTRN0 @SC90264 06302000
- KFLLOTH ICM 4,15,TMPBLK See if temp block already set up @SC90264 06302500
- BNZ KFLLOTH2 Yes, use it @SC90264 06303000
- BAL 2,KFLCGB No, get a block @SC90264 06303500
- ST 4,TMPBLK @SC90264 06304000
- MVI KFSFUID,0 Mark it unused @SC90264 06304500
- KFLLOTH2 CLC KFSFUID(LFUID+LFFNM),FABFUID Same as before? @SC90264 06305000
- BE KFLLRET Yes, just return @SC90264 06305500
- MVC KFLFUID(LFUID+LFFNM),FABFUID Set key @SC90264 06306000
- BAL 2,KFLCRED Read a directory block @SC90264 06306500
- B RTRN1 @SC90264 06307000
- CLC KFSFUID(LFUID+LFFNM),FABFUID Found right one? @SC90264 06307500
- BNE RTRN1 No, too bad @SC90264 06308000
- B KFLLRET Yes, return result @SC90264 06308500
- * 06309000
- * (Re)set current directory within Kermit file system @SC90264 06309500
- * R1->H(length),CLn new directory name. If it begins with ', @SC90264 06310000
- * the name is a prefix for external file names. If it is @SC90264 06310500
- * just *, it is equivalent to the value in KUSERID. @SC90264 06311000
- * 06311500
- KFLCWD ENTER ALT @SC90264 06312000
- L 8,DFHEIBP Get addressability @SC90264 06312500
- LH 7,0(1) Get length @SC90264 06313000
- LA 6,2(,1) And address @SC90264 06313500
- LTR 7,7 Anything in the string? @SC90264 06314000
- BZ KFLCDRP No, just drop old directory @SC90264 06314500
- CLI 0(6),C'''' External names? @SC90264 06315000
- BE KFLCDRP Yes, drop old @SC90264 06315500
- C 7,F1 Is string just '*'? @SC90264 06316000
- BNE KFLCCMP @SC90264 06316500
- CLI 0(6),C'*' @SC90264 06317000
- BNE KFLCCMP No @SC90264 06317500
- LA 6,KUSERID Yes, use true userid instead @SC90264 06318000
- KFLLAUID LA 7,LFUID @SC90264 06318500
- KFLCCMP LA 15,0(7,6) Point past string @SC90264 06319000
- CH 7,KFLLAUID+2 Shorter than usual? @SC90264 06319500
- BNL *+10 No, that's ok @SC90264 06320000
- MVC 0(LFUID,15),=CL(LFUID)' ' Yes, pad with blanks @SC90264 06320500
- CLC CURFUID,0(6) Compare with current directory @SC90264 06321000
- BE RTRN0 Matches, nothing to do @SC90264 06321500
- KFLCDRP CLI CURFUID,0 Any current directory? @SC90264 06322000
- BE KFLCSET No, nothing to drop @SC90264 06322500
- BAL 2,KFLCRB Yes, drop all blocks @SC90264 06323000
- MVI CURFUID,0 and wipe out name @SC90264 06323500
- KFLCSET CLI 0(6),C'''' External names? @SC90264 06324000
- BE RTRN0 Yes, no new directory @SC90264 06324500
- MVC USRTOTL,F0 Clear total space used @SC90264 06325000
- MVC CURFUID,0(6) Set new directory name @SC90264 06325500
- CLI CURFUID,0 Final cleanup? @SC90264 06326000
- BE KFLCLEAN Yes, release storage @SC90264 06326500
- MVC KFLFUID,0(6) Set key for reading @SC90264 06327000
- XC KFLFNAM(LFFNM),KFLFNAM @SC90264 06327500
- LA 7,PTRKFS Anchor of chain @SC90264 06328000
- KFLCLP BAL 2,KFLCGB Get a free block: ptr in R4 @SC90264 06328500
- BAL 2,KFLCRED Read a directory block @SC90264 06329000
- B KFLCLQ Couldn't, we must be finished @SC90264 06329500
- ST 4,0(,7) Link onto chain @SC90264 06330000
- ST 7,KFSPREV Link backwards, too @SC90264 06330500
- LR 7,4 Set new end of chain @SC90264 06331000
- AL 0,USRTOTL Add up space used @SC90264 06331500
- BC 12,*+8 No carry @SC90264 06332000
- SLR 0,0 @SC90264 06332500
- BCTR 0,0 Set total to max @SC90264 06333000
- ST 0,USRTOTL Keep new total @SC90264 06333500
- LM 0,1,KFSFNAM Get name of file @SC90264 06334000
- AL 1,F1 And bump 1 @SC90264 06334500
- BC 12,*+8 No carry @SC90264 06335000
- AL 0,F1 Carry @SC90264 06335500
- STM 0,1,KFLFNAM Save as next key for search @SC90264 06336000
- B KFLCLP Go get another @SC90264 06336500
- KFLCLQ MVC KFSNEXT,PTRFRE This block is left over @SC90264 06337000
- ST 4,PTRFRE @SC90264 06337500
- B RTRN0 @SC90264 06338000
- * 06338500
- * Release all storage @SC90264 06339000
- KFLCLEAN MVC PTRFRE,F0 @SC90264 06339500
- MVC PTRKFS,F0 @SC90264 06340000
- MVC TMPBLK,F0 @SC90264 06340500
- KFLCLLP ICM 1,15,PTRFREM Get ptr to next megablock @SC90264 06341000
- BZ RTRN0 No more, done freeing @SC90264 06341500
- MVC PTRFREM,0(1) Unchain it @SC90264 06342000
- LA 0,KFSDWDS*20+1 @SC90264 06342500
- DMSFRET LOC=(1),DWORDS=(0) ... and free it @SC90264 06343000
- B KFLCLLP @SC90264 06343500
- * 06344000
- * Read a directory block into buffer: key set up in KFLFUID. @SC90264 06344500
- * Return to (2) if ok, else skip. Clobbers R5 @SC90264 06345000
- * Returns R0 = size of file in bytes @SC90264 06345500
- * 06346000
- KFLCRED EXEC CICS READ DATASET(KFILE) RIDFLD(KFLFUID), @SC90264+06346500
- KEYLENGTH(=Y(LFUID+LFFNM)) GENERIC GTEQ, @SC90264+06347000
- SET(5) LENGTH(KFLBLN) NOHANDLE, @SC90264 06347500
- CLC F0,EIBRCODE @SC90264 06348000
- BNER 2 I/O error of some sort @SC90264 06348500
- CLC KFLFUID,0(5) Did we get the right uid? @SC90264 06349000
- BNER 2 No, we must be finished @SC90264 06349500
- MVC KFSFUID(LFUID+LFFNM),0(5) Ok so far, copy name @SC90264 06350000
- CLC KFLBLN,=Y(KFSLEN*2+LFKEY) Valid block? @SC90264 06350500
- * BNL KFLCRPK Ok so far, verify it @SC90264 06351000
- * - - - - - Insert code to compensate for missing info in any @SC90264 06351500
- * supported shorter block length @SC90264 06352000
- BLR 2 No, quit now @SC90264 06352500
- KFLCRPK PACK KFSDAT(8),LFKEY(15,5) @SC90264 06353000
- PACK KFSDAT+7(8),LFKEY+14(15,5) @SC90264 06353500
- PACK KFSDAT+14(2),LFKEY+28(3,5) @SC90264 06354000
- * - - - - - - Extend these PACK instrs if KFSLEN grows @SC90264 06354500
- ICM 0,3,KFSNREC Is this a valid block? @SC90264 06355000
- BNPR 2 No, stop here @SC90264 06355500
- ICM 0,15,KFSSIZE ditto @SC90264 06356000
- BNPR 2 @SC90264 06356500
- B 4(,2) Return and skip @SC90264 06357000
- * 06357500
- * Get a free block for directory, create new if necessary @SC90264 06358000
- * Return via R2, ptr in R4, uses R0,R1,R14,R15 @SC90264 06358500
- KFLCGB ICM 4,15,PTRFRE Get a free block @SC90264 06359000
- BNZ KFLCGB2 Ok, use it @SC90264 06359500
- LA 0,KFSDWDS*20+1 No, must assign some more @SC90264 06360000
- DMSFREE DWORDS=(0),ERR=RTRN1 @SC90264 06360500
- MVC 0(4,1),PTRFREM Link to megablock chain @SC90264 06361000
- ST 1,PTRFREM @SC90264 06361500
- LA 4,4(,1) Skip over megablock ptr @SC90264 06362000
- LA 15,20 Partition into 20 blocks @SC90264 06362500
- KFLCGBLP MVC KFSNEXT,PTRFRE Link to free chain @SC90264 06363000
- ST 4,PTRFRE @SC90264 06363500
- LA 4,KFSDWDS*8(,4) Skip to next block @SC90264 06364000
- BCT 15,KFLCGBLP @SC90264 06364500
- B KFLCGB Now try again @SC90264 06365000
- KFLCGB2 MVC PTRFRE,KFSNEXT Unchain the block @SC90264 06365500
- MVC KFSNEXT,F0 @SC90264 06366000
- BR 2 @SC90264 06366500
- * 06367000
- * Release all directory blocks in current directory @SC90264 06367500
- * Return via R2. Uses R0,R14,R15 @SC90264 06368000
- KFLCRB ICM 0,15,PTRKFS Any directory? @SC90264 06368500
- BZR 2 No, all done @SC90264 06369000
- MVC PTRKFS,F0 Yes, unchain all blocks @SC90264 06369500
- LA 15,PTRFRE Start of free chain @SC90264 06370000
- LR 14,15 @SC90264 06370500
- ICM 15,15,0(14) Find end of free chain @SC90264 06371000
- BNZ *-6 Saw another, keep looking @SC90264 06371500
- ST 0,0(,14) Link whole directory onto end @SC90264 06372000
- BR 2 @SC90264 06372500
- * 06373000
- DROP 3,4,8 @SC91150 06373500
- * 06374000
- KFLHEXY DC C'0123456789',X'7A7B7C7D7E7F' Printable codes @SC90264 06374500
- * : # @ ' = " with proper digit @SC90264 06375000
- LOCALS , @SC90264 06375500
- KFLDW DS 0D Temporary @SC90264 06376000
- KFLFUID DS CL(LFUID) Room for key @SC90264 06376500
- KFLFNAM DS CL(LFFNM) (including this) @SC90264 06377000
- KFLRN DS CL5 @SC90264 06377500
- KFLFDAT DS CL(2*KFSLEN) @SC90264 06378000
- KFLBLN DS H Length of record @SC90264 06378500
- KFLMNTH DS XL11 Month length table @SC86299 06379000
- * 06379500
- EXIT , @SC90264 06380000
-